2013-04-03 8 views
8

Ich übergebe eine ausführbare Datei in der Befehlszeile zu meinem Python-Skript. Ich mache einige Berechnungen und dann möchte ich das Ergebnis dieser Berechnungen auf STDIN an die ausführbare Datei senden. Wenn es fertig ist, möchte ich das Ergebnis der ausführbaren Datei von STDOUT zurückbekommen.Python Popen senden an stdin verarbeiten, empfangen auf stdout

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

Wenn ich result drucke ich nichts bekommen, nicht ohne, eine leere Zeile. Ich bin mir sicher, dass die ausführbare Datei mit den Daten arbeitet, da ich das Gleiche mit dem '>' in der Befehlszeile mit dem gleichen zuvor berechneten Ergebnis wiederholt habe.

+0

Sind Sie sicher, dass Sie, dass die ausführbare Datei auch bei der ohne Newline arbeitet getestet Ende der Eingabe? ("echo" wird einen Zeilenumbruch hinzufügen, "echo -n" wird nicht.) – svk

+0

@svk yep, funktioniert auch mit newline –

Antwort

12

Ein Arbeitsbeispiel

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

das Gleiche wie „execuable <params.file> output.file“ zu bekommen, dies zu tun:

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

Noch das gleiche Ergebnis, leere Zeile. Ist Popen eigentlich dasselbe wie '<' in der Befehlszeile? Ich versuche, das neu zu erstellen: oracle.exe output.file –

Verwandte Themen