简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM