我一直在用子進程模塊測試stderr。如果我寫與殼的簡單測試=真與Linux外殼命令ls
故意壞類型的:python:stderr with shell = True或shell = False in subprocess module
p=subprocess.Popen(["lr"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
out, err=p.communicate()
print ("standard error")
print(err)
它輸出通常從外殼:lr: command not found
。
但如果shell=False
,我不明白爲什麼該程序具有執行
Traceback (most recent call last):
File "importInteresantes.py", line 6, in <module>
p=subprocess.Popen(["lr"],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=False)
File "/usr/lib/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1024, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我認爲這會給我同樣的輸出錯誤。代碼錯誤還是我應該獲得同一個stderr的觀點?
注:萬一我也試圖與python3
在這兩種情況下,用於啓動命令的機制非常不同。爲什麼您確實希望錯誤診斷結果相同? – NPE
「lr:command not found」是一個shell錯誤消息。如果你不使用shell,那麼你沒有一個shell來顯示你的shell錯誤消息。 – jasonharper
但我期望的是,該程序至少運行,然後彈出一些錯誤。並不是說它根本無法運行。所以你不知道的情況下,我用python輸入錯誤的命令?我也聽說使用'shell = True'可能會有風險 –