只要分叉的子进程(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调用时,它完成没有问题。
提前致谢。
答案 0 :(得分:2)
如果您将strace
附加到卡住的rsync子进程,您可能会看到它被阻止写入stdout。
如果它阻止写入stdout,可能是因为管道已满因为你从未读过它。
尝试从管道中读取并丢弃输出 - 或者,如果您真的不想要输出,请不要将其连接到管道。