[英]Execute Jar in Python subprocess vs. os.system
I am learning how to exec a jar in python. 我正在学习如何在python中执行jar。 I found two ways, 1) subprocess and 2) os.system. 我找到了两种方法,1)subprocess和2)os.system。 In my code, only os.system works and am I wondering why. 在我的代码中,只有os.system工作,我想知道为什么。
Here is my code. 这是我的代码。
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')
The subprocess returns these error messages: 子进程返回以下错误消息:
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)
Thank you for your input. 谢谢您的意见。 Jim 吉姆
Your java program is saying that no date has been passed. 你的java程序说没有通过日期。 It occurs because you're not passing the arguments in the right way. 之所以发生这种情况,是因为您没有以正确的方式传递参数。 Try out this code: 试试这段代码:
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)
or this one 或者这个
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.