Python: How can I execute a jar file through a python script

前端 未结 5 873
别跟我提以往
别跟我提以往 2020-11-27 15:04

I have been looking for an answer for how to execute a java jar file through python and after looking at:

Execute .jar from Python

How can I get my python (v

相关标签:
5条回答
  • 2020-11-27 15:48

    With args: concrete example using Closure Compiler (https://developers.google.com/closure/) from python

    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)))
    

    (also see here When using os.execlp, why `python` needs `python` as argv[0])

    0 讨论(0)
  • 2020-11-27 15:53

    I would use subprocess this way:

    import subprocess
    subprocess.call(['java', '-jar', 'Blender.jar'])
    

    But, if you have a properly configured /proc/sys/fs/binfmt_misc/jar you should be able to run the jar directly, as you wrote.

    So, which is exactly the error you are getting? Please post somewhere all the output you are getting from the failed execution.

    0 讨论(0)
  • 2020-11-27 15:59

    This always works for me:

    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
    
    0 讨论(0)
  • 2020-11-27 16:00

    How about using os.system() like:

    os.system('java -jar blabla...')
    

    os.system(command) Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to sys.stdin, etc. are not reflected in the environment of the executed command.

    0 讨论(0)
  • 2020-11-27 16:03

    I used the following way to execute tika jar to extract the content of a word document. It worked and I got the output also. The command I'm trying to run is "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'))
    

    Here I got result as tuple, hence "result[0]". Also the string was in binary format (b-string). To convert it into normal string we need to decode with 'utf-8'.

    0 讨论(0)
提交回复
热议问题