所以我一直在使用 subprocess.call 来运行jar来自 Python 的文件如下:
subprocess.call(['java','-jar','jarFile.jar',-a','input_file','output_file'])
它将结果写入外部 output_file 文件。和-a是一个选项。
我现在想在 python 中分析output_file,但想避免再次打开该文件。所以我想跑jar文件.jar作为 Python 函数,例如:
output=jarFile(input_file)
我已经安装了 JPype 并让它工作,我已经设置了类路径并启动了 JVM 环境:
import jpype
classpath="/home/me/folder/jarFile.jar"
jpype.startJVM(jpype.getDefaultJVMPath(),"-Djava.class.path=%s"%classpath)
现在我被困住了...
java -jar jarFile.jar
执行jar中配置的类文件的main方法清单文件 http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Main_Attributes。
如果提取 jar 文件,您会找到该类名META-INF/MANIFEST.MF
(使用任何 zip 工具打开 jar)。寻找 的值Main-Class
。如果是这样的话com.foo.bar.Application
你应该能够像这样调用 main 方法
def jarFile(input_file):
# jpype is started as you already did
assert jpype.isJVMStarted()
tf = tempfile.NamedTemporaryFile()
jpype.com.foo.bar.Application.main(['-a', input_file, tf.name])
return tf
(我不确定tempfile模块的正确使用,请自行检查)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)