Python:如何通过python脚本执行jar文件

时间:2011-09-10 15:08:22

标签: java python jar

我一直在寻找如何通过python执行java jar文件的答案,并在看完之后:

Execute .jar from Python

How can I get my python (version 2.5) script to run a jar file inside a folder instead of from command line?

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文件。

你知道我可能做错了什么吗?或者,是否有其他网站我更多地研究我的问题?

5 个答案:

答案 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等的更改不会反映在已执行命令的环境中。