Die Optionen für popen
kann in call
verwendet werden
args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0
Also...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Dann kannst du mit myoutput
machen was du willst
Sie können auch etwas näher an einer Pipe-Ausgabe wie dieser tun.
dmesg | grep hda
wäre:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Es gibt viele schöne, nützliche Informationen auf der Python-Handbuchseite.
Wenn Sie die Ausgabe in eine Datei schreiben möchten, können Sie das stdout-Argument von subprocess.call
verwenden .
Es dauert entweder
None
(Standardmäßig wird stdout vom übergeordneten Element (Ihrem Skript) geerbt)subprocess.PIPE
(ermöglicht es Ihnen, von einem Befehl/Prozess zu einem anderen zu leiten)- ein Dateiobjekt oder ein Dateideskriptor (was Sie wollen, damit die Ausgabe in eine Datei geschrieben wird)
Sie müssen eine Datei mit etwas wie open
öffnen und übergeben Sie die Ganzzahl des Objekt- oder Dateideskriptors an call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Ich vermute, jedes gültige dateiähnliche Objekt würde funktionieren, wie ein Socket (keuch :)), aber ich habe es nie versucht.
Wie Marcog in den Kommentaren erwähnt, möchten Sie vielleicht auch stderr umleiten, Sie können dies mit stderr=subprocess.STDOUT
an denselben Ort wie stdout umleiten . Jeder der oben genannten Werte funktioniert auch, Sie können zu anderen Orten weiterleiten.