在Python子进程与os.system中执行Jar

时间:2017-02-22 05:34:20

标签: python jar

我正在学习如何在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)

感谢您的投入。 吉姆

1 个答案:

答案 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)