2014-09-23 105 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