簡體   English   中英

在Python子進程與os.system中執行Jar

[英]Execute Jar in Python subprocess vs. os.system

我正在學習如何在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)

謝謝您的意見。 吉姆

你的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM