Seite 1 von 1

subprocess.Popen mit < ..

Verfasst: Montag 16. Mai 2011, 13:16
von Aya
Hi,

ich muß via Python ein command ausführen welches in der commandline so aussieht:

theTool -t < someFile param1 param2 param3

Ich hab leider keinen Plan wie ich das via Python mache..

So habe ich es probiert:

Code: Alles auswählen

p = Popen(['theTool', '-t'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
p.communicate(input='someFile')
p.communicate(input='param1')
p.communicate(input='param2')
p.communicate(input='param3')
Das scheint aber nicht zu funktionieren.. also selbst das erste "someFile" kommt scheinbar schon nicht an wie es sollte..

Bin ich da auf dem richtigen weg? Oder funktioniert das komplett anders?

Danke,
Aya

Re: subprocess.Popen mit < ..

Verfasst: Montag 16. Mai 2011, 13:30
von BlackJack
@Aya: Das funktioniert komplett anders. Ich würde ja erst einmal Umleitungen und Optionen und Argumente für das Programm voneinander trennen. Das ist in Deinem Original-Shell-Aufruf leicht irreführend aufgeschrieben. Die Umleitung wird von der Shell *vor* allem Anderen ausgewertet und dann aus der Argumentliste entfernt. Das ``<`` bezieht sich ausschliesslich auf `someFile` und *nicht* auf die `param*`\s. Mann könnte die Zeile genau so gut in diesen Varianten schreiben:

Code: Alles auswählen

< someFile theTool -t param1 param2 param3
theTool < someFile -t param1 param2 param3
theTool -t param1 < someFile param2 param3
theTool -t param1 param2 < someFile param3
theTool -t param1 param2 param3 < someFile
Das bedeutet alles das gleiche und wird auch in der gleichen Reihenfolge ausgewertet!

Du musst die ganzen Argumente beim Aufruf übergeben und am besten die Datei `someFile` zum lesen öffnen und als `stdin`-Argument an `Popen()` übergeben.