这个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()
看到了相同的行为。
谢谢!
答案 0 :(得分:1)
我认为您应该将stdout=PIPE
参数提供给Popen
,以便root进程等待子进程返回某些内容。
在这里阅读更多内容:https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate特别是这一点:
同样,要在结果元组中获取除None之外的任何内容,您还需要提供stdout = PIPE和/或stderr = PIPE。