使用Python中的jar运行Java程序
我正在尝试使用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):
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']