2016-11-10 41 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

相關問題