récuperer commande cat /proc/pid/environ

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour, je voudrais en pythoin récuperer les variables d’environnement d’un processus dans linux en shell pour ce faire je faire un :

1
cat /proc/<pid>/environ

sauf que j’ai toute mes variables dans 1 ligne, ce qui est illisible et non parsable par la suite var1=totovar2=tutuvar3=titi

du coup je fais cette commande :

1
xargs --null --max-args=1 < /proc/<pid>/environ

la j’ai toute mes variables avec un saut de ligne pour chaque variable par exemple : var1=toto var2=tutu var3=titi

maintenant je voudrais exécuter cette commande dans un programme en python avec subprocess :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from subprocess import Popen, PIPE
def get_value_variable(pid):
    cmd=["xargs","--null","--max-args=1","<","/proc/"+pid+"/environ"]


    process = Popen(cmd, stdout=PIPE, stderr=PIPE)
    stdout, stderr = process.communicate()
    print(stdout )
    """for line in stdout:
        print line"""

get_value_variable("1080")

sauf que le programme freeze, il se bloque sans rien m’afficher, je fais ctrl+c et voila mon erreur :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
^CTraceback (most recent call last):
  File "mypid.py", line 13, in <module>
    get_value_variable("1080")
  File "mypid.py", line 8, in get_value_variable
    stdout, stderr = process.communicate()
  File "/usr/lib64/python2.7/subprocess.py", line 800, in communicate
    return self._communicate(input)
  File "/usr/lib64/python2.7/subprocess.py", line 1401, in _communicate
    stdout, stderr = self._communicate_with_poll(input)
  File "/usr/lib64/python2.7/subprocess.py", line 1455, in _communicate_with_poll
    ready = poller.poll()

je pense que ma syntaxe est correcte, y’a peut etre une option dans Popen a rajouter/modifier pour régler ce probleme ?

Édité par cepus

+0 -0

Salut,

Je dirais que ton programme est en attente de données sur stdin, parce qu’en l’état, tu ne lui donnes aucune entrée.

Le tableau cmd représente en effet un tableau d’arguments tel que passé à exec, ce n’est pas interprété par un shell. Je sais que Popen dispose d’un paramètre shell, mais je ne sais pas si ça interprète les <. Vois plutôt avec le paramètre stdin.

Après, la meilleure solution serait de directement traiter le fichier depuis Python, sans subprocess.

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte