2013-02-04 36 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的原因僅僅是由於試驗和錯誤,這是我目前的嘗試:) –