2013-06-21 61 views

回答

28

傳遞參數的列表,請參閱the very first code example in the docs

import subprocess 

subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3]) 

如果arg3不是字符串;將其轉換爲字符串後傳遞到check_call()arg3 = str(arg3)

+0

如果我所有的參數都是變量,我不把它們設置爲字符串嗎? – user2510173

+0

@ user2510173:我不明白questi上。這裏有一個例子:'arg3 = 1',爲了轉換它,你可以調用'str(arg3)'返回''1''。 – jfs

+2

不幸的是,代碼中的例子並沒有回答原來的問題,因爲他們選擇了一個只有一個參數的簡單例子。目前還不清楚多個參數應該作爲單個字符串傳遞還是作爲多個傳遞參數傳遞,除非您仔細閱讀了POpen背後的詳細信息。即使這樣,它只會說「提供一系列參數通常是首選」 - 不是,「你必須提供多個參數作爲列表」 –

0

您忘記了添加args的名字。

subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True) 
+0

所以文件路徑也需要在args中設置? – user2510173

3
subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], shell = True). 

如果使用shell = True腳本和它的參數必須作爲字符串傳遞。 args序列中的任何其他元素都將被視爲shell的參數。

您可以在http://docs.python.org/2/library/subprocess.html#subprocess.Popen找到完整的文檔。

1

嗨,我知道這是解決方案是相當晚,但可以幫助某人。

例如:

import subprocess 
pass_arg=[] 
pass_arg[0]="/home/test.sh" 
pass_arg[1]="arg1" 
pass_arg[2]="arg2" 

subprocess.check_call(pass_arg) 

上面實施例提供的arg1 arg2的和作爲參數的外殼腳本test.sh

實質上,子期望的陣列。所以你可以填充一個數組並提供它作爲參數。

0

再舉一個例子,這是不包括在上述所有的,

subprocess.Popen([ '/你的/ script.sh%S%S%S' %(參數1,參數2,參數3)] ,shell = True)

請注意,當你鍵入%(參數1,參數2,參數3)時,在%和(例如%(參數1,參數2,參數3)無效之間不應該有空格