2017-02-27 1 views
0

En Python, subprocess.Popen(cmd) peut renvoyer une instance subprocess.Popen, qui représente un processus avec certains cmd. Je me demande, est-il possible d'obtenir un tel exemple par le port que le processus écoute, ou par le pid du processus?Comment obtenir une instance de processus (avec pid ou port d'écoute) en Python?

Par exemple, existe-t-il une API telle que subprocess.getProcessesByPort(port) ou subprocess.getProcess(pid)? Je comprends qu'une telle flexibilité peut causer des problèmes de sécurité et ne sera pas surpris si cela est impossible. Je n'ai jamais utilisé ce module auparavant et je souhaite en savoir plus sur ce sujet.

Merci d'avance!

Répondre

1

psutil package peut fournir ce que vous voulez de manière multiplateforme.

+0

Merci! J'ai vérifié ce module tout à l'heure et il est en effet capable de récupérer un processus par son pid. Alors, est-il possible de lancer l'instance dans ceux du module 'subprocess'? – zzy

+0

Je ne sais pas ça. Parce que le constructeur de Popen appelle ** un nouveau processus **: Sur POSIX, la classe utilise le comportement os.execvp() pour exécuter le programme enfant. Sous Windows, la classe utilise la fonction Windows CreateProcess(). Voir [documentation] (https://docs.python.org/3/library/subprocess.html#subprocess.Popen). D'autre part, psutil a sa propre classe pour l'abstraction de processus: 'psutil.Process' qui pourrait fournir la fonctionnalité dont vous avez besoin de' subprocess.Popen' –

+0

Got it that a beaucoup de sens. Merci beaucoup! – zzy