2014-12-23 55 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

謝謝!那做了這個工作。 –