2014-12-23 21 views
1

这Python代码:proc.communiate()不是正在等待的svn命令完成

print "Start update" 
print " ".join(["svn","update",workspace_root) 
proc = subprocess.Popen(["svn","update",workspace_root]) 
proc.communicate() 
if (proc.returncode!= 0): 
    do_exit("Error trying to update "+workspace_root) 
print "Finish update" 

#CD到工作区

推出这个结果:

Start update 
svn update /data/home/vuser13/verify_and_merge_repo 
Finish update 
Updating 'verify_and_merge_repo': 
At revision 307. 

注意, proc.communicate()不会等到svn命令完成。

这是怎么回事?我的cron作业在长时间运行时会超时,因为它不会等待完成。我看到与subprocess.call()相同的行为。

谢谢!

+0

你有没有试过'proc.wait()'? –

+0

哪个操作系统?这种事情可以在Windows上用批处理文件发生('cron'当然是暗示,但是无论如何检查)。 – tdelaney

+0

我在Red Hat 6上运行。谢谢! –

回答

1

我想你应该把stdout=PIPE的参数给Popen,这样你的根进程就等待子进程返回一些东西。

在这里阅读更多:https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate尤其是这一点:

同样,要获得比无结果中的元组其他任何东西,你需要给标准输出=管和/或标准错误= PIPE过。

+0

在完成之前''''''''''都要调用'wait'。你不需要重定向'stdout'来使用它们。 – tdelaney

+0

TIL。非常感谢! tdelaney – Nebril

+0

谢谢!那做了这个工作。 –