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

So verwenden Sie den Befehl "subprocess" mit Pipes

Weitere Informationen finden Sie in der Dokumentation zum Einrichten einer Pipeline mithilfe von Unterprozessen:http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

Ich habe das folgende Codebeispiel nicht getestet, aber es sollte ungefähr das sein, was Sie wollen:

query = "process_name"
ps_process = Popen(["ps", "-A"], stdout=PIPE)
grep_process = Popen(["grep", query], stdin=ps_process.stdout, stdout=PIPE)
ps_process.stdout.close()  # Allow ps_process to receive a SIGPIPE if grep_process exits.
output = grep_process.communicate()[0]

Oder Sie können immer die Methode communication für die Subprozessobjekte verwenden.

cmd = "ps -A|grep 'process_name'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
output = ps.communicate()[0]
print(output)

Die Methode communication gibt ein Tupel aus der Standardausgabe und dem Standardfehler zurück.


Um eine Pipe mit dem subprocess zu verwenden Modul müssen Sie shell=True bestehen .

Dies ist jedoch aus verschiedenen Gründen, nicht zuletzt aus Sicherheitsgründen, nicht wirklich ratsam. Erstellen Sie stattdessen ps und grep getrennt verarbeiten und die Ausgabe von einem in den anderen leiten, etwa so:

ps = subprocess.Popen(('ps', '-A'), stdout=subprocess.PIPE)
output = subprocess.check_output(('grep', 'process_name'), stdin=ps.stdout)
ps.wait()

In Ihrem speziellen Fall besteht die einfache Lösung jedoch darin, subprocess.check_output(('ps', '-A')) aufzurufen und dann str.find am Ausgang.


Verwendung von subprocess.run

import subprocess
    
ps = subprocess.run(['ps', '-A'], check=True, capture_output=True)
processNames = subprocess.run(['grep', 'process_name'],
                              input=ps.stdout, capture_output=True)
print(processNames.stdout)

Linux
  1. Verwendung des ethtool-Befehls mit Beispielen

  2. So verwenden Sie den Su-Befehl unter Linux

  3. Verwendung von Pipes und Named Pipes unter Linux (mit Beispielen)

  4. SCP-Befehl in Linux:Verwendung mit Beispielen

  5. Wie verwende ich Regex mit dem Find-Befehl?

So verwenden Sie den Gunzip-Befehl unter Linux mit Beispielen

So verwenden Sie den Linux-rm-Befehl mit Beispielen

So verwenden Sie den PS-Befehl

So verwenden Sie den TOP-Befehl

Verwendung des Shutdown-Befehls mit Beispielen

So verwenden Sie den Sleep-Befehl unter Linux:Erklärt mit Beispielen