2016-11-10 40 views
0

在python2.7脚本,我使用subprocess.call运行这样的Java程序:需要Java错误后继续前进时,Python脚本使用子进程运行Java程序

java_command = "java -jar /path/to/java_program.jar %s %s >> %s" % (infile, outfile, logfile) 
subprocess.call(java_command, shell=True) 
... 
#Do other stuff unrelated to this output 

大多数当时,这工作得很好,但在某些情况下,Java程序犯错:

Exception in thread "main" java.lang.NullPointerException 
    at MyProgram.MainWindow.setProcessing(MainWindow.java:288) 

的问题是,我的Python脚本,然后停滞在subprocess.call()线和不能做“其他东西”。

有没有一种方法可以编辑我正在使用的java_command或者我使用subprocess继续python脚本的方式,即使java程序挂起?

请注意,我无法修改java程序的代码。

回答

1

我想你想从同一个包check_call方法:

try: 
    status = subprocess.check_call(java_command, shell=True) 
except CalledProcessError as e: 
    # The exception object contains the return code and 
    # other failure information. 
    ... react to the failure and recover 
+0

只是尝试这样做,但没有成功。我认为Java程序在出错后并没有完全退出。当我在命令行外部运行相同的java命令时,它会给出相同的答案,但仍然不会返回命令行提示符,直到我按Ctrl-C。 –

+0

似乎基于[this](http://stackoverflow.com/a/18607936/1623026),异常可能不会终止JVM,这意味着我可能会卡在这里。 –

+0

我明白你的意思了。你是对的:Java程序需要特定的流处理来终止异常。您可能想要生成过程并继续,偶尔检查其状态? – Prune