Možnosti pro popen
lze použít v call
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
Takže...
myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=myoutput)
Pak můžete s myoutput
dělat, co chcete
Také můžete udělat něco, co se blíží výstupu z potrubí, jako je tento.
dmesg | grep hda
by bylo:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Na manuálové stránce pythonu je spousta krásných užitečných informací.
Pokud chcete zapsat výstup do souboru, můžete použít stdout-argument subprocess.call
.
Chce to buď
None
(výchozí hodnota stdout je zděděna z nadřazeného (vašeho skriptu))subprocess.PIPE
(umožňuje přecházet z jednoho příkazu/procesu do druhého)- objekt souboru nebo deskriptor souboru (co chcete, aby byl výstup zapsán do souboru)
Potřebujete otevřít soubor s něčím jako open
a předejte celé číslo deskriptoru objektu nebo souboru do call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Hádám, že jakýkoli platný objekt podobný souboru by fungoval, jako je zásuvka (vzdech :)), ale nikdy jsem to nezkoušel.
Jak marcog zmiňuje v komentářích, možná budete chtít přesměrovat i stderr, můžete jej přesměrovat na stejné místo jako stdout pomocí stderr=subprocess.STDOUT
. Kterákoli z výše uvedených hodnot funguje také, můžete se přesměrovat na různá místa.