2013-03-01 13 views
15

Jak mogę replikować następujące polecenie wsadowe przy użyciu modułu podprocesów Pythona?Używanie plików jako stdin i stdout do podprocesów

myprogram <myinput.in> myoutput.out 

Innymi słowy, w jaki sposób mogę uruchomić myprogram używając zawartości myinput.in jako standardowego wejścia i myoutput.out jako standardowe wyjście?

Odpowiedz

24

Poniższa powinno działać:

myinput = open('myinput.in') 
myoutput = open('myoutput.out', 'w') 
p = subprocess.Popen('myprogram.exe', stdin=myinput, stdout=myoutput) 
p.wait() 
myoutput.flush() 
+0

To wygląda blisko tego, czego potrzebuję. Jak wykryć, czy wystąpiły błędy? –

+0

Nieważne. stderr = subprocess.PIPE, a następnie, jeśli stderr: print error –

+0

W linii 'myoutput = open ('myoutput.out'. 'w')' parametry powinny być oddzielone przez ',', a nie '.' – flagg19

-5

otwiera plik w podproces. To jest połączenie blokujące. Więc kontrola nie przejdzie do następnej linii, dopóki plik nie zostanie otwarty.

ss=subprocess.Popen(FileName,shell=True) 
ss.communicate()