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')exceptIOError:# proc has already terminatedcontinue
Tendrá que rodear la llamada read () con un bloque try / except, ya que un pid devuelto al leer os.listdir ('/ proc') puede que ya no exista en el momento en que lea la línea cmd.
Yanamon
4
¡Al final! ¡Validación! ¡Ahora puedo parar! :-)
bobince
5
-1 para / proc ya que no es portátil y hay mejores interfaces disponibles
Good Person
2
Cuidado: la línea de comando termina en 0x00. Los espacios en blanco también se reemplazan con el mismo carácter.
Federico
2
Solo use 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.
RichVel
83
¡Puede usar psutil como una solución independiente de la plataforma!
¡Gracias por mencionar este tema! Paquete ordenado.
codekoala
5
No es completamente independiente de la plataforma: en OSX puede encontrar errores de AccessDenied
amos
@amos tiene algo de sentido: primero querrás tener privilegios antes de buscar información sobre los procesos. Gracias por la pista.
JSmyth
Para amplificar el punto OSX, necesita privilegios de root en OSX para obtener información del proceso, a diferencia de Linux.
RichVel
8
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.
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 :)
Respuestas:
En mi opinión, mirar el
/proc
sistema de archivos es menos desagradable que piratear la salida de texto deps
.fuente
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!
fuente
Puede utilizar una biblioteca de terceros, como PSI :
fuente
La forma autorizada de crear y utilizar procesos secundarios es a través del módulo de subprocesos.
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.
fuente
Me gustaría utilizar el subproceso módulo para ejecutar el comando
ps
con 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,ps
por 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 ).
fuente
fuente