GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso convogliare una chiamata di sottoprocesso a un file di testo?

Le opzioni per popen può essere utilizzato in 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

Quindi...

myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)

Quindi puoi fare quello che vuoi con myoutput

Inoltre, puoi fare qualcosa di più simile a un output reindirizzato come questo.

dmesg | grep hda

sarebbe:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

Ci sono un sacco di belle informazioni utili nella pagina di manuale di Python.


Se vuoi scrivere l'output in un file puoi usare l'argomento stdout di subprocess.call .

Ci vogliono entrambi

  • None (l'impostazione predefinita, stdout è ereditata dal genitore (il tuo script))
  • subprocess.PIPE (consente di reindirizzare da un comando/processo a un altro)
  • un oggetto file o un descrittore di file (quello che vuoi, per avere l'output scritto in un file)

Devi aprire un file con qualcosa come open e passa l'intero descrittore di oggetto o file a call :

f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)

Immagino che qualsiasi oggetto simile a un file valido funzionerebbe, come un socket (gasp :)), ma non ci ho mai provato.

Come marcog menziona nei commenti, potresti voler reindirizzare anche stderr, puoi reindirizzare questo nella stessa posizione di stdout con stderr=subprocess.STDOUT . Anche uno qualsiasi dei valori sopra menzionati funziona, puoi reindirizzare a luoghi diversi.


Linux
  1. Come spostare una riga in un file di testo su o giù di una riga?

  2. Come trovare parentesi non corrispondenti in un file di testo?

  3. Come analizzare ogni riga di un file di testo come argomento di un comando?

  4. Come inserire un testo all'inizio di un file?

  5. Come grep \n nel file

Come confrontare e unire file di testo su Linux

Come creare directory da un file di testo in Linux

Come salvare l'output dei comandi di Linux in un'immagine o in un file di testo

Come bloccare un file di testo in Linux usando il comando flock

Come stampare righe duplicate in un file di testo in Linux

Come aggiungere testo all'inizio del file in Linux