子进程没有捕获将它存储在Python

时间:2016-10-16 04:36:15

标签: python python-2.7

我尝试使用以下代码来使用子流程从屏幕捕获输出,但它没有按照我的意图去做。

#!/tools/bin/python

import subprocess

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

预期输出为:

vimo 
vimo 

即。一个用于回显过程,另一个用于打印结果输出。 但我所看到的是

vimo

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

我在上面的谜题中缺少什么!!帮忙!!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Python >= 3.7(使用 Python 3.9 测试)


r=subprocess.run(['echo','$XDG_DATA_HOME'],capture_output=True,shell=True)
assert r.stdout.find(b'share')>0 # ERROR
r=subprocess.run('echo $XDG_DATA_HOME',capture_output=True,shell=True)
assert r.stdout.find(b'share')>0 # OK