首页 > 后端开发 > Python教程 > 如何从 Python 中的子进程命令获取实时输出?

如何从 Python 中的子进程命令获取实时输出?

DDD
发布: 2024-12-03 08:52:09
原创
360 人浏览过

How Can I Get Live Output from a Subprocess Command in Python?

子进程命令的实时输出

在 Python 中,您可以捕获子进程命令的输出,并同时使用以下命令生成实时流输出以下方法:

使用迭代器

import subprocess
import sys

p = subprocess.Popen(['command'], stdout=subprocess.PIPE)
for line in iter(lambda: p.stdout.readline(1), ''):
    sys.stdout.buffer.write(line)
登录后复制

使用 FileWriter 和 FileReader

import io
import time
import subprocess
import sys

log = 'test.log'
with io.open(log, 'wb') as writer, io.open(log, 'rb', 1) as reader:
    p = subprocess.Popen(['command'], stdout=writer)
    while p.poll() is None:
        sys.stdout.write(reader.read())
        time.sleep(0.5)
    # Read the remaining
    sys.stdout.write(reader.read())
登录后复制

原始代码重构

在你的原始代码,您可以在创建子流程后捕获实时输出:如下:

ret_val = subprocess.Popen(run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
while not ret_val.poll():
    log_file.flush()
    for line in iter(lambda: ret_val.stdout.readline(1), ''):
        if line:
            print(line)
            log_file.write(line.decode())
登录后复制

此方法允许您捕获 stdout 和 stderr 流并打印实时输出,同时将其写入日志文件。

以上是如何从 Python 中的子进程命令获取实时输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板