用Python的子进程模块包装Java程序的问题

我有一个小的Java程序,可以使用以下语法从命令行运行:

java -jar EXEV.jar -s:myfile

这个Java程序将一些数据打印到屏幕上,我想将标准输出重定向到一个名为output.txt的文件中.

from subprocess import Popen, PIPE

def wrapper(*args):
    process = Popen(list(args), stdout=PIPE)
    process.communicate()[0]
    return process

x = wrapper('java', '-jar', 'EXEV.jar', '-s:myfile', '>', 'output.txt')

当我运行上面的命令时,永远不会写入output.txt,并且Python不会抛出任何错误.谁能帮我解决问题?

解决方法:

您需要使用stdout = output,其中output是一个打开的文件,用于写入’output.txt’,然后从命令中删除输出重定向,或者将输出重定向保留在命令中,并使用无stdout参数的shell = True:

选项1:

from subprocess import Popen

def wrapper(*args):
    output = open('output.txt', w)
    process = Popen(list(args), stdout=output)
    process.communicate()
    output.close()
    return process

x = wrapper('java', '-jar', 'EXEV.jar', '-s:myfile')

选项2:

from subprocess import Popen

def wrapper(*args):
    process = Popen(' '.join(args), shell=True)
    process.communicate()
    return process

x = wrapper('java', '-jar', 'EXEV.jar', '-s:myfile', '>', 'output.txt')
上一篇:Python持久性Popen


下一篇:Python可执行文件到Linux列出具有大小的文件