2013-06-20 49 views
4

您好我對Python非常陌生,我正嘗試使用subprocess.call調用另一個Python腳本的子進程。但我的論點是變量名稱。那麼,我應該使用subprocess.call或subprocess.popen?以參數作爲變量的子進程調用python

我想從另一個python腳本執行以下命令:

python npp.python -i fname -o fname+"out" -l fname+"log" -e excplist -i ignorelist 

所以,我該怎麼辦

subprocess.Popen(['python', 'npp.python', '-i', fname , 'o', fname+"out", '-l', fname+"log", '-e', excplist,'-i',ignrlist]).communicate() 

我不能這樣做來調用其他程序。任何建議,我做錯了什麼?

+3

你有正確的想法,但在'-o'選項上缺少'-'。 –

+0

'subprocess.call'基本上是'subprocess.Popen',但它返回退出代碼。使用'subprocess.Popen'。另外,你可以說出了什麼問題嗎?爲什麼代碼不工作? – refi64

+0

'sh' python第三個模塊呢? – Dreampuf

回答

0

PJust僅供參考。 這樣做的一個非常簡單的方法就是事先定義命令並將其轉換爲參數列表。

command = "python npp.python -i {file} -o {file}.out -l {file}.log -e {excep} -i {ignore}".format(file=pipe.quote(fname), excep=exceptlist, ignore=ignorelist) 

subprocess.call(shlex.split(command)) # shlex.split is safer for shell commands than the usual split 
# or popen if the return code isn't needed 
subprocess.Popen(shlex.split(command)) 

通過這種方式,以列表形式編寫命令時很容易出錯。

+0

如果您需要列表,請創建一個列表。不要以字符串開頭並將其轉換爲列表。 –

+0

您是否介意爲什麼不應該這樣做。我明白它爲該程序增加了一個額外的步驟,但它使得查看命令更好。在我看來,它很容易解決以列表形式創建命令時出現愚蠢的語法錯誤的問題,特別是如果它長時間處於OP中的情況。許多其他人也這樣做:http://stackoverflow.com/questions/4091242/subprocess-call-requiring-all-parameters-to-be-separated-by-commas – cwoebker

相關問題