2013-04-03 8 views
8

Przepuszczam plik wykonywalny w linii poleceń do mojego skryptu Pythona. Wykonuję obliczenia, a następnie chciałbym wysłać wynik tych obliczeń na STDIN do pliku wykonywalnego. Kiedy to się skończy, chciałbym odzyskać wynik pliku wykonywalnego z STDOUT.Python Popen wysyła do przetworzenia na stdin, odbierając na stdout

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

Po wydrukowaniu result nic nie dostaję, a nie Brak, pusta linia. Jestem pewien, że plik wykonywalny działa z danymi, ponieważ powtórzyłem to samo, używając ">" w wierszu polecenia z tym samym uprzednio obliczonym wynikiem.

+0

Czy jesteś pewien, że testowałem że wykonywalny działa nawet bez nowej linii na koniec wejścia? ("echo" doda znak nowej linii, "echo -n" nie będzie.) – svk

+0

@svk yep, działa również z nową linią –

Odpowiedz

12

przykład roboczych

#!/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() 

dostać to samo co „execuable <params.file> output.file”, to zrobić:

#!/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() 
+0

Wciąż ten sam wynik, pusta linia. Czy Popen jest tak samo jak "<" w linii poleceń? Próbuję odtworzyć to: oracle.exe output.file –