我一直在寻找如何通过python执行java jar文件的答案,并在看完之后:
How to run Python egg files directly without installing them?
我尝试执行以下操作(我的jar和python文件都在同一目录中):
import os
if __name__ == "__main__":
os.system("java -jar Blender.jar")
和
import subprocess
subprocess.call(['(path)Blender.jar'])
两者都没有奏效。所以,我认为我应该使用Jython,但我认为必须有一种更简单的方法来通过python执行jar文件。
你知道我可能做错了什么吗?或者,是否有其他网站我更多地研究我的问题?
答案 0 :(得分:51)
我会这样使用子进程:
import subprocess
subprocess.call(['java', '-jar', 'Blender.jar'])
但是,如果你有一个正确配置的/proc/sys/fs/binfmt_misc/jar
,你应该可以直接运行jar,就像你写的那样。
那么,这正是你得到的错误? 请将失败执行中的所有输出发布到某处。
答案 1 :(得分:8)
这对我来说总是有用的:
from subprocess import *
def jarWrapper(*args):
process = Popen(['java', '-jar']+list(args), stdout=PIPE, stderr=PIPE)
ret = []
while process.poll() is None:
line = process.stdout.readline()
if line != '' and line.endswith('\n'):
ret.append(line[:-1])
stdout, stderr = process.communicate()
ret += stdout.split('\n')
if stderr != '':
ret += stderr.split('\n')
ret.remove('')
return ret
args = ['myJarFile.jar', 'arg1', 'arg2', 'argN'] # Any number of args to be passed to the jar file
result = jarWrapper(*args)
print result
答案 2 :(得分:1)
使用args:使用来自python
的Closure Compiler(https://developers.google.com/closure/)的具体示例import os
import re
src = test.js
os.execlp("java", 'blablabla', "-jar", './closure_compiler.jar', '--js', src, '--js_output_file', '{}'.format(re.sub('.js$', '.comp.js', src)))
(另见When using os.execlp, why `python` needs `python` as argv[0])
答案 3 :(得分:1)
我使用以下方式执行tika jar来提取word文档的内容。它奏效了,我也得到了输出。我尝试运行的命令是"java -jar tika-app-1.24.1.jar -t 42250_EN_Upload.docx"
from subprocess import PIPE, Popen
process = Popen(['java', '-jar', 'tika-app-1.24.1.jar', '-t', '42250_EN_Upload.docx'], stdout=PIPE, stderr=PIPE)
result = process.communicate()
print(result[0].decode('utf-8'))
在这里,我得到的结果为元组,因此为"result[0]"
。字符串也是二进制格式(b字符串)。要将其转换为普通字符串,我们需要使用“ utf-8”进行解码。
答案 4 :(得分:0)
怎么样使用os.system():
os.system('java -jar blabla...')
os.system(命令) 在子外壳程序中执行命令(字符串)。这是通过调用标准C函数system()来实现的,并且具有相同的限制。 sys.stdin等的更改不会反映在已执行命令的环境中。