我有一个小的java程序,我可以使用以下语法从命令行运行:
java -jar EXEV.jar -s:myfile
这个java程序将一些数据打印到屏幕上,我希望将stdout
重定向到名为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不会抛出任何错误。任何人都可以帮我解决问题吗?
答案 0 :(得分:3)
您需要使用stdout=output
其中output
是一个用于写入'output.txt'的打开文件并从命令中删除输出重定向,或者将输出重定向保留在命令中并使用shell=True
没有stdout
参数:
选项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')