Wenn Sie die Ausgabe in eine Datei schreiben möchten, können Sie das stdout -argument von verwenden subprocess.call
.
Es dauert None
, subprocess.PIPE
ein Datei - Objekt oder eine Dateibeschreibung. Der erste ist der Standardwert, stdout wird vom übergeordneten Element (Ihrem Skript) geerbt. Mit der zweiten können Sie von einem Befehl / Prozess zu einem anderen weiterleiten. Der dritte und vierte sind das, was Sie möchten, damit die Ausgabe in eine Datei geschrieben wird.
Sie müssen eine Datei mit so etwas wie öffnen open
und die Ganzzahl des Objekts oder des Dateideskriptors an Folgendes übergeben call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Ich vermute, dass jedes gültige dateiähnliche Objekt funktionieren würde, wie ein Socket (keuchen :)), aber ich habe es nie versucht.
Wie Marcog in den Kommentaren erwähnt, möchten Sie möglicherweise auch stderr umleiten. Sie können dies an denselben Speicherort wie stdout umleiten stderr=subprocess.STDOUT
. Jeder der oben genannten Werte funktioniert auch. Sie können an verschiedene Stellen umleiten.
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
sollte funktionieren.shlex.quote
Überprüfen Sie auch, ob Sie möglicherweise verschmutzte Daten an eine Subshell übergeben.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@ KurkurelDie Optionen für
popen
können in verwendet werdencall
So...
Dann können Sie tun, was Sie wollen
myoutput
(was übrigens eine Datei sein müsste).Sie können auch etwas näher an einem Pipeline-Ausgang wie diesem tun.
wäre:
Auf der Python-Handbuchseite finden Sie viele nützliche Informationen .
quelle