2017-02-22 29 views
1

我正在學習如何在python中執行jar。我找到了兩種方法,1)子進程和2)os.system。在我的代碼中,只有os.system有效,我想知道爲什麼。在Python子進程中執行jar與os.system

這是我的代碼。

import os 

os.chdir('/Users/Jim/Desktop') 

import subprocess 
from subprocess import Popen, PIPE, STDOUT 
p = Popen(['java','-cp','dfp-api-1.0-SNAPSHOT-standalone.jar', \ 
      'dfp.axis.v201611.lineitemservices.GetAllLineItems', \ 
      '-c ads.properties', \ 
      '-o lineitem-prev.txt', \ 
      '-l 2017-02-16X00:00:00'], \ 
      stdout=PIPE, stderr=STDOUT) 
for line in p.stdout: 
    print line 

os.system('java -cp dfp-api-1.0-SNAPSHOT-standalone.jar dfp.axis.v201611.lineitemservices.GetAllLineItems -c ads.properties -o lineitem.txt -l 2017-02-20X00:00:00') 

子進程返回這些錯誤消息:

Exception in thread "main" java.lang.NullPointerException 
at java.text.SimpleDateFormat.parse(Unknown Source) 
at java.text.DateFormat.parse(Unknown Source) 
at dfp.axis.v201611.lineitemservices.GetAllLineItems.executeIngest(GetAllLineItems.java:46) 
at dfp.axis.v201611.GoogleApiHandler.lightTheFuse(GoogleApiHandler.java:103) 
at dfp.axis.v201611.lineitemservices.GetAllLineItems.main(GetAllLineItems.java:99) 

謝謝您的輸入。 Jim

回答

0

您的Java程序是說沒有通過日期。 這是因爲您沒有以正確的方式傳遞參數。 試試這個代碼:

from subprocess import Popen, PIPE, STDOUT 
p = Popen(['java','-cp','dfp-api-1.0-SNAPSHOT-standalone.jar', \ 
      'dfp.axis.v201611.lineitemservices.GetAllLineItems', \ 
      '-c', 'ads.properties', \ 
      '-o', 'lineitem-prev.txt', \ 
      '-l', '2017-02-16X00:00:00'], \ 
      stdout=PIPE, stderr=STDOUT) 

或這一個

from subprocess import Popen, PIPE, STDOUT 
p = Popen('java -cp dfp-api-1.0-SNAPSHOT-standalone.jar dfp.axis.v201611.lineitemservices.GetAllLineItems -c ads.properties -o lineitem.txt -l 2017-02-20X00:00:00', 
      shell=True, stdout=PIPE, stderr=STDOUT) 
+0

感謝您輕鬆沒收。它現在可以如預期般完美運作。再次感謝! –