subprocess.Popen mit < ..

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
Aya
User
Beiträge: 2
Registriert: Montag 16. Mai 2011, 13:12

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
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.
Antworten