GNU/Linux >> Znalost Linux >  >> Linux

Jak převedu volání podprocesu do textového souboru?

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.


Linux
  1. Jak přidat text na konec souboru v Linuxu

  2. Jak najít nesrovnatelné závorky v textovém souboru?

  3. Jak analyzovat každý řádek textového souboru jako argument příkazu?

  1. Jak odstraním nové řádky z textového souboru?

  2. Jak grep \nv souboru

  3. Jak upravit textový soubor v mém terminálu

  1. Jak snadno přidat text na konec souboru v Linuxu

  2. Jak odstranit duplicitní řádky uvnitř textového souboru?

  3. Jak posunout řádek v textovém souboru nahoru nebo dolů o jeden řádek?