Seite 1 von 1

Input zum Subprocess

Verfasst: Donnerstag 8. Juli 2010, 17:40
von User0815
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!

Re: Input zum Subprocess

Verfasst: Donnerstag 8. Juli 2010, 17:56
von ms4py
Schau mal in der Doku nach `subprocess.Popen.communicate`, müsste ein Beispiel dabei sein.

Re: Input zum Subprocess

Verfasst: Freitag 9. Juli 2010, 09:37
von User0815
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()

Re: Input zum Subprocess

Verfasst: Freitag 9. Juli 2010, 09:46
von Barabbas
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

Re: Input zum Subprocess

Verfasst: Freitag 9. Juli 2010, 15:37
von ms4py

Code: Alles auswählen

from subprocess import Popen, PIPE
output = Popen(["mycmd", "myarg"], stdin=PIPE, stdout=PIPE).communicate('input...')[0]
:?