繁体   English   中英

从子流程实时打印标准输出

[英]printing stdout in realtime from subprocess

我想打印而不是捕获bash命令的输出(比这篇文章更接近实时)。 例如,我有一个这样的脚本:

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字节 ),如果您想立即开始读取文件,请尝试以下操作:

for line in iter(p.stdout.readline,''):
    print line
import subprocess
cmd = 'rsync --rsh=ssh -rv thisdir/ servername:folder/'
subprocess.call(cmd, shell=True)

shell=True参数通过将字符串传递给sh来解释字符串,从而允许sh将字符串拆分为标记。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM