example español python linux subprocess pipe

español - subprocess python 3 example



Comando de subproceso Python con tubería (7)

Quiero usar subprocess.check_output() con ps -A | grep ''process_name'' ps -A | grep ''process_name'' . Intenté varias soluciones, pero hasta ahora nada funcionó. ¿Alguien puede guiarme cómo hacerlo?


Además, intente utilizar ''pgrep'' comando ''pgrep'' lugar de ''ps -A | grep ''process_name'' ''ps -A | grep ''process_name''


Consulte la documentación sobre cómo configurar una interconexión mediante subproceso: http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

No he probado el siguiente ejemplo de código, pero debería ser más o menos lo que desea:

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]


La solución de JKALAVIS es buena, sin embargo, agregaría una mejora para usar shlex en lugar de SHELL = TRUE. a continuación estoy recogiendo los tiempos de consulta

#!/bin/python import subprocess import shlex cmd = "dig @8.8.4.4 +notcp www.google.com|grep ''Query''" ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) output = ps.communicate()[0] print output

Aclamaciones,


Para usar una tubería con el módulo de subprocess , debe pasar shell=True .

Sin embargo, esto no es realmente aconsejable por varias razones, una de las cuales es la seguridad. En su lugar, cree los procesos ps y grep separado y canalice la salida de uno a otro, de esta forma:

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

En su caso particular, sin embargo, la solución simple es llamar a subprocess.check_output((''ps'', ''-A'')) y luego str.find en la salida.


Puede probar la funcionalidad de tubería en sh.py :

import sh print sh.grep(sh.ps("-ax"), "process_name")


Puedes probar

check_output(["sh", "-c", "ps", "-A", "|", "grep", "process_name"])

O

check_output(["bash", "-c", "ps", "-A", "|", "grep", "process_name"])


o puede usar siempre el método de comunicación en objetos de subproceso.

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

El método de comunicación devuelve en una tupla la salida estándar y el error estándar.