2013-02-04 19 views
1

我试图从一个python脚本传递一些参数,bash脚本以下列方式:如何从Python中捕捉输入在bash脚本

input_string = pathToScript + " " + input1 + " " + input2 + " " + input3 + " " + input4 + " " + \ 
input5 + " " + input6 + " " + input7 + " " + input8 + " " + input9 + " " + input10 

args = shlex.split(input_string) 

p = subprocess.Popen(args) 

,所有的inputX都是字符串。每个参数都应传递给脚本,脚本的路径存储在变量pathToScript中。我现在希望能够赶在bash脚本这些参数就像我平时做的事:

#No input check yet... 
history_file = "$1" 
folder_history_file = "$2" 
folder_bml_files = "$3" 
separate_temperature = "$4" 
separate_temperature_col_index = "$5" 
separate_sight = "$6" 
separate_sight_col_index = "$7" 
separate_CO = "$8" 
separate_CO_col_index = "$9" 
separate_radiation = "$10" 

这会导致像line 61: separate_CO_col_index: command not found错误所有这些线和错误不会出现在相同的方式行是有序的。换句话说,第61行的错误有时会在第60行的错误之前被捕获,看起来来自Eclipse的输出(我在Eclipse中使用PyDev)。

是否无法像这样运行bash脚本?我已经尝试了下面的方法。 17.1.1.1在这里,但我可能没有正确理解它:python docs

+0

首先,看看使用列表来存储数据而不是10个单独命名的变量。其次,如果你想连接这样的字符串(你不应该在这里),使用'join()'。第三,如果你把数据放在一个列表中,concat> split to list>传递给参数序列变得多余(这已经是浪费了,所以你应该摆脱它)。 –

+0

是的,我肯定会使用一个列表,只是尝试了一个concatinated字符串,看看它是否有任何区别。 –

回答

4

bash中的错误出现,因为你在=周围放置空格。您应该使用的

history_file="$1" 

代替

history_file = "$1" 

当你把空间存在,猛砸认为该行是一个命令调用,并尝试运行history_file为命令。


在你的Python脚本,你可以简单地使用:

args = [pathToScript, input1, input2, ....] 

,而不是你拥有什么。这更简单,并且如果参数包含空格,那么当前代码将会失败,它将正确工作。构建input_string字符串仅用于将其拆分回以下行没有意义。

+0

谢谢,从来没有意识到我没有在我的旧脚本中使用空格。我对字符串进行concatin的原因仅仅是由于试验和错误,这是我目前的尝试:) –