使用Python中的jar运行Java程序

使用Python中的jar运行Java程序,java,python,jar,operating-system,command,Java,Python,Jar,Operating System,Command,我正在尝试使用Python中的jar运行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):

我正在尝试使用Python中的jar运行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文件通过读取scanner.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
import org.codehaus.jackson.map.ObjectMapper;
^
java:380:错误:找不到符号
ObjectMapper mapper=新的ObjectMapper();
^
符号:类ObjectMapper
位置:类解析程序
java:380:错误:找不到符号
ObjectMapper mapper=新的ObjectMapper();
^
符号:类ObjectMapper
位置:类解析程序
3个错误
回溯(最近一次呼叫最后一次):
文件“parseJson.py”,第15行,在
编译java('parseJason.java')
编译java中的第5行文件“parseJson.py”
检查调用(['javac',java\u文件])
文件“/Users/***/anaconda2/lib/python2.7/subprocess.py”,第541行,在check\u调用中
引发被调用的进程错误(retcode,cmd)
subprocess.CalledProcessError:命令'['javac','parseJason.java']'返回非零退出状态1
有人知道我错过了什么吗?谢谢

Command '['java', 'parseJason.java']'
命令应与以前相同

  • 缺少类路径
  • 主类称为
    parseJason
    ,而不是
    parseJason.java
试一试


感谢您的回复。请您更详细地说明如何修复我的程序。再次感谢。谢谢!我根据您的建议做了一些更改,并且收到了一个新错误。您还需要
javac
命令的类路径。但是您真的想每次都编译这个吗?通常,人们会预先编译java并部署它他编译了二进制文件。所以你的意思是,我实际上不需要“compile_java”函数。我可以在前面编译java,只运行“execute_java”函数?我升级到了Python 3。当我运行我的程序时,我遇到了以下错误“memoryview:需要一个类似于object的字节,而不是'str'”。你可以看看这篇文章吗?谢谢
cmd = ['java', 
  '-classpath',  '.:/Users/blablalba/jackson-all-1.9.0.jar', 
  'parseJason']