Input zum Subprocess

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
User0815
User
Beiträge: 4
Registriert: Donnerstag 24. Juni 2010, 07:56

Hallo,

ich versuche ein Programm via subprocess aus Python heraus zu starten. Das klappt auch ganz wunderbar mit subprocess.call("xyz.exe") allerdings wartet das Programm dann auf die Eingabe eines Strings den es für den weiteren Programmablauf benötigt... und da drückt der Schuh!
Wie kann ich diesen String an das Programm übergeben, sobald dieses danach fragt (bzw. gleich beim Aufruf mit übergeben).

Vielen Dank schon einmal für die Hilfe!
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Schau mal in der Doku nach `subprocess.Popen.communicate`, müsste ein Beispiel dabei sein.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
User0815
User
Beiträge: 4
Registriert: Donnerstag 24. Juni 2010, 07:56

So, ich habe jetzt eine Lösung gefunden. Ist wahrscheinlich nicht die beste, aber auf jeden Fall funktioniert sie.
Wenn irgendwer weiß wie man das ohne der Hilfsdatei temp.txt macht, wäre ich für eine kurzes Beispiel dankbar. :D

Code: Alles auswählen

import subprocess

f=open('temp.txt','r')         #enthält die Eingabe für das Programm

XYZ = subprocess.Popen("xyz.exe",stdin=f)
returncode = XYZ.wait()
if returncode != 0:
    raise ("XYZ wasn't able to finish the calculation")

f.close()
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo User0815.

ms4py hat dich doch auf communicate() hingewiesen. Ich verstehe dann immer nicht ganz, warum solche Hinweise völlig übergangen werden und es schlicht heißt "wenn ihr ein lauffähiges Beispiel habt - immer her damit".

Nach kurzer Suche habe ich diesen Artikel gefunden, in dem auch ein lauffähiges Beispiel zu finden ist.

Viel Spaß und schönen Gruß,

brb
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

from subprocess import Popen, PIPE
output = Popen(["mycmd", "myarg"], stdin=PIPE, stdout=PIPE).communicate('input...')[0]
:?
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten