proc.communiate()不等待svn命令完成

时间:2014-12-23 20:21:32

标签: python svn

这个python代码:

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()看到了相同的行为。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您应该将stdout=PIPE参数提供给Popen,以便root进程等待子进程返回某些内容。

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

  

同样,要在结果元组中获取除None之外的任何内容,您还需要提供stdout = PIPE和/或stderr = PIPE。