GNU/Linux >> Znalost Linux >  >> Linux

Jak používat příkaz `subprocess` s rourami

Viz dokumentaci k nastavení kanálu pomocí podprocesu:http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

Následující příklad kódu jsem netestoval, ale mělo by to být zhruba to, co chcete:

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]

Nebo můžete vždy použít komunikační metodu pro objekty podprocesu.

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

Metoda komunikace vrací n-tici standardního výstupu a standardní chybu.


Chcete-li použít potrubí s subprocess modulu, musíte předat shell=True .

To se však z různých důvodů, v neposlední řadě z hlediska bezpečnosti, nedoporučuje. Místo toho vytvořte ps a grep zpracovává odděleně a výstup z jednoho do druhého převedete takto:

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

Ve vašem konkrétním případě je však jednoduchým řešením volání subprocess.check_output(('ps', '-A')) a poté str.find na výstupu.


Pomocí 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. Jak používat příkaz ethtool s příklady

  2. Jak používat Su Command v Linuxu

  3. Jak používat příkaz Rmmod v systému Linux s příklady

  1. Jak používat Pipes a Named Pipes v Linuxu (s příklady)

  2. Příkaz SCP v Linuxu:Jak jej používat, s příklady

  3. Jak používat regex s příkazem find?

  1. Jak používat příkaz IP v Linuxu s příklady

  2. Jak používat Linux Cat Command (s příklady)

  3. Jak používat Linux Hexdump Command s praktickými příklady