60 votes

Manière multiplateforme pour obtenir des PID par nom de processus dans le python

Plusieurs processus avec le même nom sont en cours d'exécution sur l'hôte. Qu'est-ce que la croix-plate-forme de façon à obtenir le Pid de ce processus par le nom à l'aide de python ou jython?

  1. C'est comme pidof mais en python (je n'ai pas pidof de toute façon).
  2. Je ne peux pas analyser de /proc, car il peut être indisponible (sur HP-UX).
  3. Je ne veux pas utiliser os.popen ("p") et d'analyser la sortie parce que je pense que c'est laid (domaine de la séquence peuvent être différentes selon les OS).
  4. Cible sont les plates-formes Solaris, HP-UX, et peut-être d'autres.

81voto

Giampaolo Rodolà Points 2965

Vous pouvez utiliser psutil (http://code.google.com/p/psutil) qui fonctionne sur Windows et UNIX:

importation psutil

NOMPROC = "python.exe"

pour le proc en psutil.process_iter():
 si proc.nom == NOMPROC:
 imprimer proc

Le code ci-dessus sur mes machines impressions:

psutil.Processus (PID:2908; PPID:3944; NOM:'python.exe'; CHEMIN d'accès:'C:\Python26'; CMDL
INE:['C:\\Python26\\python.exe', 'D:\\pyftpdlib\\svn\\psutil\\foo.py']; UID:-1;
GID:-1;)

14voto

Ivan Points 854

Il n'y a pas d'API multiplateforme unique, vous devrez vérifier pour OS. Pour posix utilisation à base /proc. Pour Windows utiliser le code suivant pour obtenir la liste de tous les pids avec coresponding noms de processus

Vous pouvez alors filtrer facilement les processus dont vous avez besoin. Pour plus d'informations sur les propriétés disponibles de Win32-Process consultez Win32-Process Class

13voto

baco Points 105
<pre><code></code><p>Donnez tous les pids de "YourProcess.exe"</p></pre>

3voto

S.Lott Points 207588

Tout d'abord, Windows (dans toutes ses incarnations) est un système d'exploitation non standard.

Linux (et la plupart des unixen propriétaires) sont des systèmes d'exploitation standard conformes à POSIX.

Les bibliothèques C reflètent cette dichotomie. Python reflète les bibliothèques C.

Il n'y a pas de "plateforme transversale" pour ce faire. Vous devez pirater quelque chose avec des ctypes pour une version particulière de Windows (XP ou Vista)

1voto

David Cournapeau Points 21956

Je ne pense pas que vous serez en mesure de trouver un python purement à base de python, solution portable sans utiliser /proc ou utilitaires de ligne de commande, du moins pas en python lui-même. Parsing os.system n'est pas laid - quelqu'un doit faire face aux plates-formes multiples, que ce soit vous ou quelqu'un d'autre. La mise en œuvre pour l'OS qui vous intéresse devrait être assez facile, honnêtement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X