我想打印而不是捕获bash命令的输出(比this post更接近实时).例如,我有一个这样的脚本:from subprocess import Popen, PIPE, STDOUTcmd = rsync --rsh=ssh -rv thisdir/ servername:folder/p = Popen(cmd.split(...

我想打印而不是捕获bash命令的输出(比this post更接近实时).例如,我有一个这样的脚本:
from subprocess import Popen, PIPE, STDOUT
cmd = 'rsync --rsh=ssh -rv thisdir/ servername:folder/'
p = Popen(cmd.split() ,stdout=PIPE, stderr=STDOUT)
output = p.communicate()[0]
print output
我希望从rsync实时打印文件传输的详细信息,就像从命令行进行rsync一样,而不是等待进程完成以打印输出.
解决方法:
尝试这样做:
from subprocess import Popen, PIPE, STDOUT
cmd = 'rsync --rsh=ssh -rv thisdir/ servername:folder/'
p = Popen(cmd.split(), stdout=PIPE, stderr=STDOUT)
for line in p.stdout:
print line
请注意,p.stdout具有硬编码缓冲区(8192 bytes),如果要立即开始读取文件,请尝试以下操作:
for line in iter(p.stdout.readline,''):
print line
沃梦达教程
本文标题为:python-从子进程实时打印标准输出


基础教程推荐
猜你喜欢
- Python3 三种进程创建方法 2023-09-03
- python-比较ctypes数组而无需额外的内存 2023-11-12
- python-多重处理:为什么在复制列表时与子进程共享一个numpy数组? 2023-11-11
- python初学定义函数 2023-08-09
- 在Linux中达到一定大小后,停止将Python脚本写入文件 2023-11-12
- python-如何将空参数传递给Popen(shell = False)? 2023-11-10
- python-带有islice的生成器循环中的内存泄漏 2023-11-11
- API例子:用Python驱动Firefox采集网页数据 | 一起学习Python网络爬虫 2023-09-04
- linux命令产生Python OSError:[Errno 2]没有这样的文件或目录 2023-11-11
- Python基础学习之函数和代码复用详解 2022-09-02