drbunsen
drbunsen

Reputation: 10709

Issues with wrapping Java program with Python's subprocess module

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?

Upvotes: 3

Views: 698

Answers (1)

Andrew Clark
Andrew Clark

Reputation: 208715

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

Upvotes: 3

Related Questions