2016-10-16 105 views
0

我试过下面的代码来捕获使用子进程从屏幕输出,但它没有做我想做的事。子进程没有捕获stdout的输出存储在Python中的变量内

#!/tools/bin/python 

import subprocess 

result = subprocess.check_output("echo $USERNAME", shell=True) 
print result 

预期输出是:

vimo 
vimo 

即一个用于回波过程和一个用于打印结果输出。 但我看到的是

vimo 

但是,当我尝试打印结果输出,它总是空的。

我在上面的拼图中错过了什么!帮帮忙!

+0

父进程捕获孩子的标准输出。所以结果相当期待 – user3159253

+1

你想达到什么目的? – user3159253

+0

哦!对不起..感到困惑,并认为它会打印两个输出..但后来我明白存储在变量中的值被打印出来。 – Vimo

回答

0

这里你去了一些大大剥离(并为了保护隐私的原因)原始虚拟一段代码,从外部脚本输出抓取stdin和stdout。

from subprocess import Popen, PIPE 

cmd = ['echo', 'foo'] 

proc = Popen(cmd, stdout=PIPE, stderr=PIPE) 
comm = proc.communicate() 

if proc.returncode != 0: 
    # code to handle/parse stderr (comm[1]) 
    raise RuntimeError(
     '\'%s\': command has failed (%d):\n%s' 
     % ('some value', proc.returncode, comm[1])) 

for line in comm[0].split('\n'): 
    if line.find('Wrote:') == 0: 
     # some code to parse stdout 
     pass 
相关问题