首页 > 解决方案 > Python子进程获取真实输出并将输出加载到变量

问题描述

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

我正在使用 python 子进程

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

以上命令成功将命令输出加载到变量 var1

我想在终端上看到实时输出。我可以使用如下调用

 call(["some command"]) 

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

标签: pythonpython-2.7subprocess

解决方案


我认为这将适用于基于行的实时输出:

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)

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

请注意,这不会很好地移植到 Python 3,因为sys.stdout它是面向文本的(使用 Unicode),但进程是面向字节的(尽管在最近的 Python 3 版本中可以更改后者)。


推荐阅读