Проблемы с переносом Java-программы на модуль подпроцесса Python - PullRequest
3 голосов
/ 21 марта 2012

У меня есть небольшая 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 не выдает никаких ошибок.Может кто-нибудь помочь мне разобраться в проблеме?

1 Ответ

3 голосов
/ 21 марта 2012

Вам нужно либо использовать 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...