python - Python子进程获取真实输出并将输出加载到变量
问题描述
我必须将命令输出到python中的变量。
我正在使用 python 子进程
from subprocess import *
var1 = check_output(["some_command"])
以上命令成功将命令输出加载到变量 var1
我想在终端上看到实时输出。我可以使用如下调用
call(["some command"])
现在我想同时实现两件事,即将输出加载到变量并将输出显示到终端。请帮我。
解决方案
我认为这将适用于基于行的实时输出:
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 版本中可以更改后者)。
推荐阅读
- vba - 动态检查与 Worksheets -VBA Excel 同名的复选框
- c# - 尝试在 Dot Net Core 2.0 中解码 JWT
- mongodb - mongodb中的unpivot分组列
- c# - 读取 Helpers 的 URL 参数
- php - 我如何在 php 中优化我的代码以进行循环
- qt - 如何在 qmake 生成过程中指定 pkgconfig 的 Libs 变量?
- javascript - 在 javascript 文件中设置 firebase-admin sdk
- java - Java Xpath在xml中排除孩子
- vue.js - vue.config.js 访问特定位置
- python - 张量流损失始终为 0.0