2013-04-03 9 views
8

Ho passato un eseguibile sulla riga di comando al mio script python. Faccio alcuni calcoli e poi mi piacerebbe inviare il risultato di questi calcoli su STDIN all'eseguibile. Al termine, vorrei ottenere il risultato dell'eseguibile da STDOUT.Popolo Python che invia a elaborare su stdin, ricevendo su stdout

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

Quando stampo result non ottengo niente, non è None, una riga vuota. Sono sicuro che l'eseguibile funziona con i dati poiché ho ripetuto la stessa cosa usando '>' sulla riga di comando con lo stesso risultato calcolato in precedenza.

+0

Sei sicuro che hai provato che l'eseguibile funziona anche senza una nuova riga alla fine dell'input? ("echo" aggiungerà una nuova riga, "echo -n" non lo farà.) – svk

+0

@svk sì, funziona anche con newline –

risposta

12

Un esempio di lavoro

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

per ottenere la stessa cosa di “execuable <params.file> output.file”, fare questo:

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

Ancora stesso risultato, riga vuota. Popen è effettivamente uguale a "<" sulla riga di comando? Sto cercando di ricreare questo: oracle.exe output.file –