GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie leite ich einen Unterprozessaufruf an eine Textdatei weiter?

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.


Linux
  1. Wie entferne ich doppelte Zeilen in einer Textdatei?

  2. Wie verschiebt man eine Zeile in einer Textdatei um eine Zeile nach oben oder unten?

  3. Wie finde ich nicht übereinstimmende Klammern in einer Textdatei?

  4. Wie analysiert man jede Zeile einer Textdatei als Argument für einen Befehl?

  5. Wie entferne ich Zeilenumbrüche aus einer Textdatei?

Wie man Textdateien unter Linux vergleicht und zusammenführt

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

So speichern Sie die Linux-Befehlsausgabe in einem Bild oder einer Textdatei

So sperren Sie eine Textdatei in Linux mit dem Befehl flock

So drucken Sie doppelte Zeilen in einer Textdatei unter Linux

So fügen Sie Text am Anfang einer Datei in Linux hinzu