Python子进程获取实际输出并将输出加载到变量

时间:2018-10-08 07:40:20

标签: python python-2.7 subprocess

我必须将命令输出输出到python中的变量。

我正在使用python子进程

from subprocess import *
var1 = check_output(["some_command"]) 

Above Command成功将命令输出加载到变量var1

我想在终端上看到实时输出。我可以使用下面的呼叫

 call(["some command"]) 

现在,我想同时实现两件事,即将输出加载到变量并将输出显示到终端。请帮我。

1 个答案:

答案 0 :(得分:0)

对于基于行的实时输出,我认为这会起作用:

proc = subprocess.Popen(["some_command"], stdout=subprocess.PIPE)
var1 = []
while True:
    line = proc.stdout.readline()
    if not line:
        break
    var1.append(line)
    sys.stdout.write(line)
var1 = "".join(var1)

readlinefor line in proc.stdout)的迭代器版本在这里不起作用,因为它执行过多的缓冲。您也可以使用proc.stdout.read(1)代替readline()来完全禁用缓冲。

请注意,由于sys.stdout是面向文本的(使用Unicode),但是进程却是基于字节的(尽管后者可以在最近的Python 3版本中进行更改),因此这对Python 3来说不是很好。