2012-06-12 59 views
0
str = "blah -l" 
    cpuinfo = subprocess.Popen(str.split(),stdout=PIPE,stderr=PIPE) 

    tuples = cpuinfo.communicate() 

在上面的代碼中,當我給str = [some_valid_command]給出元組的輸出時。當我給一個無效的命令,我預計將要採取的PIPE的錯誤,但它仍然是扔出去控制檯上....我不太清楚,在這裏我的理解是錯誤的....在python子進程中拋出輸出stderr = PIPE

謝謝.....

回答

1

我不知道,如果你看到的標準錯誤居然出現在控制檯上,或只運行到Python未能生成一個進程名爲「嗒嗒」,這是運行示例時產生您提供...

的例子的輸出將是Python的提高的OSError: [Errno 2] No such file or directory,這是可以預料的,除非你有一個名爲可執行腳本「嗒嗒」的PATH

我做了一個簡單的測試,並寫了一個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')

因此,也許你真正看到的是,不管節目你試圖調用(如果它不是胡說),根本就不在你的路徑中。

此外還有一個關於在Python中使用str作爲標籤的註釋:str是一個內置類型,不應該用作變量或函數的名稱,除非您特別要「過載」內置類型,功能。 string也是一樣。

相關問題