Python Popen отправляет в процесс на стандартный ввод, получает на стандартный вывод

Я передаю исполняемый файл в командной строке моему скрипту Python. Я делаю некоторые вычисления, а затем хочу отправить результат этих вычислений на STDIN в исполняемый файл. Когда он завершится, я хотел бы получить результат исполняемого файла из STDOUT.

ciphertext = str(hex(C1))
exe = popen([sys.argv[1]], stdout=PIPE, stdin=PIPE)
result = exe.communicate(input=ciphertext)[0]
print(result)

Когда я печатаю result, я ничего не получаю, а не None, пустую строку. Я уверен, что исполняемый файл работает с данными, поскольку я повторил то же самое, используя «>» в ​​командной строке с тем же ранее рассчитанным результатом.


person Rupert Cobbe-Warburton    schedule 03.04.2013    source источник
comment
Вы уверены, что проверили, что исполняемый файл работает даже без новой строки в конце ввода? (echo добавит новую строку, echo -n — нет.)   -  person svk    schedule 03.04.2013
comment
@svk да, работает и с новой строкой   -  person Rupert Cobbe-Warburton    schedule 03.04.2013


Ответы (1)


Рабочий пример

#!/usr/bin/env python
import subprocess
text = 'hello'
proc = subprocess.Popen(
    'md5sum',stdout=subprocess.PIPE,
    stdin=subprocess.PIPE)
proc.stdin.write(text)
proc.stdin.close()
result = proc.stdout.read()
print result
proc.wait()

чтобы получить то же самое, что и «execuable < params.file > output.file», сделайте так:

#!/usr/bin/env python
import subprocess
infile,outfile = 'params.file','output.file'
with open(outfile,'w') as ouf:
    with open(infile,'r') as inf:
        proc = subprocess.Popen(
            'md5sum',stdout=ouf,stdin=inf)
        proc.wait()
person Hal Canary    schedule 03.04.2013
comment
Тот же результат, пустая строка. Действительно ли Popen совпадает с '‹' в командной строке? Я пытаюсь воссоздать это: oracle.exe ‹ params.file › output.file - person Rupert Cobbe-Warburton; 03.04.2013