[英]capture stderr from python subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
[英]Throws output outside, despite giving stderr=PIPE in python subprocess
str = "blah -l"
cpuinfo = subprocess.Popen(str.split(),stdout=PIPE,stderr=PIPE)
tuples = cpuinfo.communicate()
在上面的代碼中,當我給出str = [some_valid_command]時,將輸出提供給元組。 當我發出無效命令時,我希望該錯誤將帶給PIPE,但仍會在控制台上拋出該錯誤。...我不太確定,我在哪里理解錯了...。
謝謝.....
我不確定您是否看到stderr實際上出現在控制台上,還是只是在運行Python失敗時才生成名為“ blah”的進程,該進程是在運行您提供的示例時產生的...
該示例的輸出將是Python引發OSError: [Errno 2] No such file or directory
,除非您在PATH中有一個名為“ blah”的可執行腳本,否則這是不希望的。
我做了一個簡單的測試,並編寫了一個bash腳本,如下所示:
#!/bin/bash
echo "This is stdout"
echo "This is a failure on stderr" >&2
exit 1
在授予該腳本可執行文件權限之后,我重復了您的示例,但這樣稱呼我的腳本(在本地目錄中名為fail.sh):
import subprocess
cmd = './fail.sh'
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate()
按預期返回此結果('This is stdout\\n', 'This is a failure on stderr\\n')
。
因此,也許您真正在這里看到的是您要調用的任何程序(如果不是這樣的話)都根本不存在於PATH中。
還要注意在Python中使用str
作為標簽的注意事項: str
是內置類型,不應用作變量或函數的名稱,除非您特別想“重載”內置函數。 string
也是一個類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.