¿Cómo puedo obtener la lista de procesos en ejecución usando Python en Linux?
Respuestas:
En mi opinión, mirar el /procsistema de archivos es menos desagradable que piratear la salida de texto de ps.
import os
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
for pid in pids:
try:
print open(os.path.join('/proc', pid, 'cmdline'), 'rb').read().split('\0')
except IOError: # proc has already terminated
continue
psutil: hace todo esto a través de una agradable interfaz Pythonic y es portátil si alguna vez desea ejecutar en un servidor que no sea Linux.
¡Puede usar psutil como una solución independiente de la plataforma!
import psutil
psutil.pids()
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224,
268, 1215, 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355,
2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245,
4263, 4282, 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358,
4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446, 5167, 5234, 5235,
5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
Puede utilizar una biblioteca de terceros, como PSI :
PSI es un paquete de Python que proporciona acceso en tiempo real a los procesos y otra información variada del sistema, como la arquitectura, el tiempo de arranque y los sistemas de archivos. Tiene una API pythonic que es coherente en todas las plataformas compatibles, pero también expone detalles específicos de la plataforma cuando es conveniente.
La forma autorizada de crear y utilizar procesos secundarios es a través del módulo de subprocesos.
import subprocess
pl = subprocess.Popen(['ps', '-U', '0'], stdout=subprocess.PIPE).communicate()[0]
print pl
El comando se divide en una lista de argumentos de Python para que no sea necesario ejecutarlo en un shell (de forma predeterminada, el subproceso Popen no utiliza ningún tipo de entorno de shell, simplemente lo ejecuta). Debido a esto, no podemos simplemente suministrar 'ps -U 0' a Popen.
Me gustaría utilizar el subproceso módulo para ejecutar el comando pscon las opciones apropiadas. Al agregar opciones, puede modificar los procesos que ve. Muchos ejemplos de subprocesos en SO. Esta pregunta responde cómo analizar la salida de, pspor ejemplo :)
Como se muestra en una de las respuestas de ejemplo, también puede utilizar el módulo PSI para acceder a la información del sistema (como la tabla de procesos en este ejemplo ).
import os
lst = os.popen('sudo netstat -tulpn').read()
lst = lst.split('\n')
for i in range(2,len(lst)):
print(lst[i])