我正在学习如何在python中执行jar。我找到了两种方法,1)subprocess和2)os.system。在我的代码中,只有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)
感谢您的投入。 吉姆
答案 0 :(得分: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)