Python subprocess 实现子进程实时日志输出详解
本文介绍如何使用 Python 的 subprocess 模块配合 stdout=subprocess.PIPE 实现子进程日志的实时读取。通过轮询 p.poll() 状态并逐行读取 stdout,可避免缓冲区阻塞,确保主进程能即时捕获子进程的输出内容。
Python subprocess 实时输出日志实现
test11.py 文件内容如下
import time
print "1"
time.sleep(2)
print "1"
time.sleep(2)
print "1"
time.sleep(2)
print "1"
test.py 文件内容如下
导入 subprocess 模块
使用 subprocess.Popen 启动子进程,指定命令为 python test11.py,启用 shell 模式,并将标准输出重定向到管道
poll() 方法返回 None 表示子进程仍在运行
当 poll() 返回 None 时,循环读取 stdout 的一行输出。若该行不为空字符串,则打印该输出内容
子进程命令执行与日志重定向
补充说明:利用 subprocess.Popen 执行命令时,通过重定向标准输出可实现实时日志捕获
执行具体命令的代码示例
import subprocess
import sys
# 常用编码
GBK = 'gbk'
UTF8 = 'utf-8'
# 解码方式,一般 py 文件执行为utf-8 ,cmd 命令为 gbk
current_encoding = GBK
popen = subprocess.Popen('ping www.baidu.com', shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
bufsize = 1)
out,err = popen.communicate()
print('std_out: ' + out)
print('std_err: ' + err)
print('returncode: ' + str(popen.returncode))
执行 .py 文件的代码示例
import subprocess
import sys
# 常用编码
GBK = 'gbk'
UTF8 = 'utf-8'
current_encoding = UTF8
popen = subprocess.Popen('python D:\code\test.py',
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
bufsize = 1)
out,err = popen.communicate()
print('std_out: ' + out)
print('std_err: ' + err)
print('returncode: ' + str(popen.returncode))
以上关于 Python subprocess pipe 实时输出日志的操作方法分享完毕,供读者参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









