2014-09-23 102 views
1

我有兩個我想從Python腳本調用的.jar文件。但是,在我調用第一個jar之後,終端就坐落在服務器正在運行之後不會處理任何事情。服務器啓動正常,但我想啓動另一個進程,直到我要求他們停止。在Python中運行併發.jar進程

我在尋找可能的解決方案時遇到了困難,因爲我不確定使用什麼術語。

from subprocess import call 
import glob 
import sys 

h2 = glob.glob("h2*.jar") 
reasoner = glob.glob("reasoner*.jar") 

h2 = h2.pop() 
reasoner = reasoner.pop() 

call(["java", "-jar", h2, "-tcp"]) # Any call commands after this point don't execute 
+0

' subprocess.call'文件「等待命令完成」。請閱讀文檔。 – mdurant 2014-09-23 15:49:06

回答

0

使用subprocess.Popen而不是subprocess.call它等待子進程終止。

from subprocess import Popen 

... 

Popen(["java", "-jar", h2, "-tcp"]) 

僅供參考,Python documentation是看,特別是爲subprocess module documentation這一特定問題的好地方。


UPDATE

如果你想,當你使用Popen明確地等待子過程中,參考保存到POPEN對象,並使用wait方法:

proc = Popen(["java", "-jar", h2, "-tcp"]) 
# Do something else .. 
proc.wait() # block execution until the sub-process terminate. 
+0

謝謝!然而,現在我已經運行了,當我通過Ctrl + C殺死應用程序時,我開始的第一個進程永遠不會與它一起被殺死。我是否必須趕上KeyboardInterruption? – AmericanKryptonite 2014-09-23 16:08:01

+0

@美國Kryptonite,我更新了答案。那是你要的嗎? – falsetru 2014-09-23 16:31:13

+0

是的,這是完美的。謝謝! – AmericanKryptonite 2014-09-23 17:23:04