2016-02-24 71 views
4

如果我打電話如何從os.popen()獲取stderr?

os.popen('foo').read() 

我想捕捉

sh: foo: not found 

爲好。
我沒有subprocess模塊,因爲這是嵌入式系統上的最小安裝。

popen3,4無法正常工作或:

File "/usr/lib/python2.7/os.py", line 667, in popen3 
import subprocess 
ImportError: No module named subprocess 

我想我可以做

os.popen(command + " 2>&1").read() 

管道它到stdout,但理想的我想單獨得到它。

+1

使用'os.popen4()';它返回一個帶有'child_stdin,child_stderr'的元組。你也可以用'popen3()'返回'child_stdin,child_stdout,child_stderr'。 **免責聲明**:我想。 – zondo

+0

這些是子進程的包裝。 –

+1

如何管道到一個真實的文件,然後打開它? – cat

回答

0

由於子要到位os.popen的使用,你可以做這樣的事情

test.py:

from subprocess import PIPE, Popen 

p = Popen("foo", shell=True, stdout=PIPE, stderr=PIPE) 
stdout, stderr = p.communicate() 
print "stdout: '%s'" % stdout 
print "stderr: '%s'" % stderr 

現在執行:

python test.py 
stdout: '' 
stderr: '/bin/sh: 1: foo: not found 
' 

通知的CR在stderr。