Python - 只要子进程正在运行就执行代码

时间:2014-09-17 17:08:01

标签: python subprocess rsync

只要分叉的子进程(rsync)正在运行,我想运行一段代码。这就是我在代码中的表现:

rsync_proc = subprocess.Popen(proc_args, stdout=subprocess.PIPE)
while rsync_proc.poll() == None:
            sys.stdout.write('\r'+ 
                rsync_progress_report(source_size_kb, dest, start)),
            sys.stdout.flush()
            time.sleep(1)

由于某种原因,这会导致rsync子进程几乎完成时卡住。 while循环只是继续循环,rsync_proc.poll()返回None。 当我在没有while循环代码的情况下运行同样的rsync调用时,它完成没有问题。

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果您将strace附加到卡住的rsync子进程,您可能会看到它被阻止写入stdout。

如果它阻止写入stdout,可能是因为管道已满因为你从未读过它

尝试从管道中读取并丢弃输出 - 或者,如果您真的不想要输出,请不要将其连接到管道。