2014-03-04 106 views
1

我想在Python腳本像這樣運行命令:的Python:subprocess.call錯誤「命令未找到」

subprocess.call("ghdl -a --ieee=synopsys -fexplicit " + testBenchFile + " >> a_log.txt", shell = True) 

隨着「testBenchFile是一個字符串,但它拋出一個」命令未找到「錯誤

我在做什麼錯

+3

ghdl位於何處?它在你的PATH中嗎? – mkriheli

+0

是的,它在我的路徑中。另外,如果我直接從終端運行命令(複製粘貼輸出的print(「ghdl ...」+ testBenchFile +「>> ...」)),它運行沒有問題。 – DennisVDB

+1

你能展示確切的回溯? –

回答

0

嘗試提供ARGS爲一個列表

subprocess.call(["ghdl", "-a", "--ieee=synopsys", "-fexplicit", testBenchFile, ">>", "a_log.txt"], shell = True) 
1

變化:?

subprocess.call("ghdl -a --ieee=synopsys -fexplicit " + testBenchFile + " >> a_log.txt", shell = True) 

到:

subprocess.call(["ghdl", "-a", "--ieee=synopsys", "-fexplicit", testBenchFile, ">>", "a_log.txt"], shell = True) 

您還可以更 「Python化」,並與您的日誌文件發揮不錯:

log_file = open("a_log.txt", "a") 
subprocess.call(["ghdl", "-a", "--ieee=synopsys", "-fexplicit", testBenchFile], shell = True, stdout=log_file) 

隨着您要重定向的輸出stdout參數你的命令,像>。但是,由於文件使用模式"a"打開,因此您正在模擬>>

+0

-1,那是錯誤的。因爲他使用'shell = True',他***可以使用字符串而不是序列作爲第一個參數:「[如果傳遞單個字符串,shell必須爲True(見下文),否則字符串必須只需簡單地命名要執行的程序而不指定任何參數。](http://docs.python.org/3.3/library/subprocess.html#frequently-used-arguments)「 – miracle173

+0

是的,你是對的。回答編輯。 –