GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la commande `subprocess` avec des pipes

Consultez la documentation sur la configuration d'un pipeline à l'aide d'un sous-processus :http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

Je n'ai pas testé l'exemple de code suivant, mais il devrait correspondre à peu près à ce que vous voulez :

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]

Ou vous pouvez toujours utiliser la méthode de communication sur les objets de sous-processus.

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

La méthode de communication renvoie un tuple de la sortie standard et de l'erreur standard.


Pour utiliser un tuyau avec le subprocess module, vous devez réussir shell=True .

Cependant, ce n'est pas vraiment conseillé pour diverses raisons, dont la sécurité n'est pas la moindre. Au lieu de cela, créez le ps et grep traite séparément et dirige la sortie de l'un vers l'autre, comme ceci :

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

Dans votre cas particulier, cependant, la solution simple consiste à appeler subprocess.check_output(('ps', '-A')) puis str.find sur la sortie.


Utilisation de 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. Comment utiliser la commande ethtool avec des exemples

  2. Comment utiliser la commande Linux Hexdump avec des exemples pratiques

  3. Comment utiliser la commande Su sous Linux

  4. Comment utiliser les canaux et les canaux nommés sous Linux (avec exemples)

  5. Comment utiliser regex avec la commande find ?

Comment utiliser la commande Linux gunzip avec des exemples

Comment utiliser la commande Linux rm avec des exemples

Comment utiliser la commande PS

Comment utiliser la commande TOP

Comment utiliser la commande shutdown avec des exemples

Comment utiliser la commande Sleep sous Linux :expliqué avec des exemples