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.