STDOUT和STORE中的子进程或者command.getstatusoutput变量

时间:2013-06-12 12:04:27

标签: python subprocess

我想要这样的东西 在STDOUT上运行'ls'命令并输出,并希望在变量

中存储相同的输出

对于长时间运行的过程,我需要在屏幕上看到执行输出,并且最后在变量

上捕获
proc = subprocess.Popen(["ls"], stdout=subprocess.PIPE, shell=False)
(out, err) = proc.communicate()
print "program output:-", out

此处执行后的输出

1 个答案:

答案 0 :(得分:1)

一旦子进程刷新其标准输出以将其存储在变量中,就逐行打印输出:

from subprocess import Popen, PIPE

buf = []
proc = Popen([cmd], stdout=PIPE, bufsize=1)
for line in iter(proc.stdout.readline, b''):
    buf.append(line)
    print line,
proc.communicate() # close `proc.stdout`; wait for the child process to exit
output = b"".join(buf)

可能有a buffering issue(输出会出现延迟);要解决此问题,您可以使用pexpect, pty modulesstdbuf, unbuffer, script commands