【问题标题】:Python subprocess to get real output and load output to variablePython子进程获取真实输出并将输出加载到变量
【发布时间】:2018-10-08 07:40:20
【问题描述】:

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

我正在使用 python 子进程

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

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

我想查看终端的实时输出。我可以使用如下调用

 call(["some command"]) 

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

【问题讨论】:

  • 您或许可以在var1中打印输出,即print(var1)
  • 但是实时不会发生对吧?
  • 也许你可以stdout到一个文件,然后tail -f那个文件。
  • 这确实不会实时发生,只有在程序退出后才能发生

标签: python python-2.7 subprocess


【解决方案1】:

我认为这对基于行的实时输出有效:

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 版本中可以更改后者)。

【讨论】:

    猜你喜欢
    • 2015-06-08
    • 2021-01-18
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多