Bonjour,
je suis plutôt développeur C++, et je fais occasionnellement du python. J'aime assez, car tout semble plus simple en python. Cependant, la logique du langage est différente, et je bute sur un truc qui, une fois n'est pas coutume, me paraitrait plus simple à faire en C++. Je dois parfaire ma connaissance python, car je suis sur que ce n'est pas si compliqué (j'ai commandé le Apprendre à programmer avec Python 3 par Gérard Swinnen pour avoir un vrai cours python, plutôt qu'un apprentissage "sur le tas")
Je vais illustrer mon propos avec du code lancé sous IDLE (très pratique d'ailleurs!)
Je lance des process avec l'objet Popen du module subprocess:
Apres je peux afficher les PID des process. En réalité, ici les process sont déja terminés donc les pid ne veulent plus dire grand chose mais c'est pour l'exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> p1 = subprocess.Popen("echo toto1") >>> p2 = subprocess.Popen("echo toto2") >>> p3 = subprocess.Popen("echo toto3")
Plutôt que de manipuler directement les variables p&, p2 et p3, je vais créer une liste de références vers ces objets:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 >>> p1.pid 6096 >>> p2.pid 8104 >>> p3.pid 9560
Maintenant je vais redéfinir un des process:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >>> L = [p1, p2, p3] >>> L [<subprocess.Popen object at 0x0000000002D8A198>, <subprocess.Popen object at 0x0000000002D8A3C8>, <subprocess.Popen object at 0x0000000002D8A2B0>] >>> L[0].pid 6096
Le PID est different, c’est normal. Le problème est que dans la liste l’objet n’est pas mis à jour :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> p1 = subprocess.Popen("echo toto1 encore") >>> p1.pid 4688
6096 c’est l’ancienne valeur! Dans la liste on a une référence vers l’ancien objet, d’où l’ancien résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> L[0].pid 6096
Mais du coup, comment faire ? En C++ j'instancierais quelques objets pour créer des process puis je me ferais une liste de pointeurs sur ces objets pour y acceder. Mais en python "p1" est une référence, du coup je ne vois pas comment faire pour garder une liste de ces instances d'objets Popen ?
une idée ?
Partager