2016-11-21 58 views
1

我想用Python中的jar運行java文件。 我第一次運行該命令:使用Python運行Java程序

java -classpath ".:/Users/blablalba/jackson-all-1.9.0.jar" parseJason 

它完美地工作。 然後我寫了一個小的python腳本來執行java文件。 (更新:我做了更改基於下面的建議

import os.path,subprocess 
from subprocess import STDOUT,PIPE 

def compile_java(java_file): 
    subprocess.check_call(['javac', java_file]) 

def execute_java(java_file, stdin): 
    java_class,ext = os.path.splitext(java_file) 
    // cmd = ['java', java_class] change to 
    cmd = ['java', 
    '-classpath', '.:/Users/blablalba/jackson-all-1.9.0.jar', 
    'parseJason'] 
     proc = subprocess.Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT) 
     stdout,stderr = proc.communicate(stdin) 

compile_java('parseJason.java') 
execute_java('parseJason.java', 'data.json','output_010.csv') 

Data.json是輸入文件名和output_010.csv是輸出文件名我的Java文件通過讀取掃描儀獲得這兩個參數。 。system.in

然後我運行命令:

python parseJson.py 

我收到以下錯誤:

import org.codehaus.jackson.map.ObjectMapper; 
           ^
parseJason.java:380: error: cannot find symbol 
     ObjectMapper mapper = new ObjectMapper(); 
     ^
    symbol: class ObjectMapper 
    location: class parseJason 
parseJason.java:380: error: cannot find symbol 
     ObjectMapper mapper = new ObjectMapper(); 
           ^
    symbol: class ObjectMapper 
    location: class parseJason 
3 errors 
Traceback (most recent call last): 
    File "parseJson.py", line 15, in <module> 
    compile_java('parseJason.java') 
    File "parseJson.py", line 5, in compile_java 
    subprocess.check_call(['javac', java_file]) 
    File "/Users/***/anaconda2/lib/python2.7/subprocess.py", line 541, in check_call 
    raise CalledProcessError(retcode, cmd) 
subprocess.CalledProcessError: Command '['javac', 'parseJason.java']' returned non-zero exit status 1 

任何人都有想法,我在這裏失蹤?謝謝!

回答

2
Command '['java', 'parseJason.java']' 

的命令應該是相同的classpath缺少

    • 主類被稱爲parseJason,不parseJason.java

    嘗試

    cmd = ['java', 
        '-classpath', '.:/Users/blablalba/jackson-all-1.9.0.jar', 
        'parseJason'] 
    
  • +0

    感謝您的回覆。請問您是否可以更具體地說明如何修復我的程序。再次感謝。 – user3369592

    +0

    謝謝!我根據您的建議做了一些更改,並收到新的錯誤。 – user3369592

    +0

    您還需要'javac'命令的類路徑。但是你真的想每次都編譯一次嗎?通常,人們先編譯java,然後部署編譯的二進制文件。 – Thilo