I have a small java program that I can run from the command line using this syntax:
java -jar EXEV.jar -s:myfile
This java program print some data to the screen and I want redirect stdout into a file called 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')
When I run the above, output.txt is never written to and Python does not throw any errors. Can anyone help me figure out the problem?
You need to either use stdout=output where output is an open file for writing to 'output.txt' and remove the output redirection from the command, or leave the output redirection in the command and use shell=True with no stdout argument:
Option 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')
Option 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')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With