Poster une réponse à un sujet: [Python] Sourcer un (c)shell
Attention, ce sujet est un sujet ancien (5095 jours sans réponse)
blietaer
Non seulement ta solution est séduisante mais aussi flexible, compacte et puissante.
Certains de ces compliments sont sans doute (aussi) à attribuer au langage, mais merci pour ton temps et tes recherches.
Certains de ces compliments sont sans doute (aussi) à attribuer au langage, mais merci pour ton temps et tes recherches.
philfr
Mets le path complet (pas relatif) vers to script.
Ou bien, pour ne pas avoir besoin de parser.sh:
output = subprocess.Popen(["/bin/csh", "-c", "source $1 ; setenv", "/home/bli/s2k.env"], stdout=subprocess.PIPE).communicate() [0]
Avec toujours le path complet vers l'exécutable...
Ou bien, pour ne pas avoir besoin de parser.sh:
output = subprocess.Popen(["/bin/csh", "-c", "source $1 ; setenv", "/home/bli/s2k.env"], stdout=subprocess.PIPE).communicate() [0]
Avec toujours le path complet vers l'exécutable...
blietaer
Du tout, c'est une solution super classe en théorie.
Je dois encore juste peaufiner, je me tape tjrs la même erreur avec subprocess...
Python 2.6.2 (r262:71600, Jun 17 2010, 13:37:18)
[GCC 4.4.1 [gcc-4_4-branch revision 150839]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> output = subprocess.Popen(["./parser.sh", "/home/bli/s2k.env"], stdout=subprocess.PIPE).communicate() [0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/subprocess.py", line 605, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1102, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
>>>
Inutile de préciser que les deux fichiers en question existent bien...
Je dois encore juste peaufiner, je me tape tjrs la même erreur avec subprocess...
Python 2.6.2 (r262:71600, Jun 17 2010, 13:37:18)
[GCC 4.4.1 [gcc-4_4-branch revision 150839]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> output = subprocess.Popen(["./parser.sh", "/home/bli/s2k.env"], stdout=subprocess.PIPE).communicate() [0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/subprocess.py", line 605, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1102, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
>>>
Inutile de préciser que les deux fichiers en question existent bien...
philfr
blietaer
BORDEL?!
philfr
Pour parser du csh, rien ne vaut csh.
parse.csh:
#!/bin/csh
source $1
printenv
Si tu exécutes "parse.csh .my.env", le stdout te crache tout l'environnement modifié par le .my.env.
Y'a plus qu'à lancer ça depuis python et récupérer le stdout:
output= subprocess.Popen(["/home/philfr/parse.csh","my.env"], stdout=subprocess.PIPE).communicate()[0]
for line in output.split('\n'):
print line
parse.csh:
#!/bin/csh
source $1
printenv
Si tu exécutes "parse.csh .my.env", le stdout te crache tout l'environnement modifié par le .my.env.
Y'a plus qu'à lancer ça depuis python et récupérer le stdout:
output= subprocess.Popen(["/home/philfr/parse.csh","my.env"], stdout=subprocess.PIPE).communicate()[0]
for line in output.split('\n'):
print line
blietaer
En sachant qu'on est en csh et qu'une solution non-acceptable serait de retourner la vapeur et de commencer par sourcer le .my.env et puis lancer le *py.
![:sweat: :sweat:](images/smileys/sweat.gif)
Cela dit si toi-même tu en arrives à me proposer cela, je me situe mieux par rapport à mon problème. Donc merci beaucoup pour ton temps (quand-même!)
philfr
Sinon, tu wrappes ton script python dans un script csh...
#!/bin/csh
source .my.env
python tonscript.py
#!/bin/csh
source .my.env
python tonscript.py
blietaer
Ces fichiers ne m'appartiennent pas, je suis dans un environement client.
Et ils ne sont pas loadé quand moi je lance mon python, mais lorsque l'utilisateur les loadera, ce sera bien depuis csh. Il ne m'appartient donc pas d'en changer le format.
Le fichier à lire est bien du CSH donc.
Maintenant, je pense que le plus simple serait de repérer la/les ligne(s) qui me botte dans ces fichiers et d'en faire une évaluation par un echo dans un appel system CSH, mais:
- j'aurais voulu éviter du parsing de fichier
- si justement la valeur à évaluer contient d'autres valeurs de variables de ce même fichier, je vais passer à côté.
grrr....
Kim: Très exactement ma question:
http://www.linuxquestions.org/questions/programming-9/source-bash-variables-into-python-environ-551956/
(et donc très exactement la réponse que je ne voulais pas entendre...)
Et ils ne sont pas loadé quand moi je lance mon python, mais lorsque l'utilisateur les loadera, ce sera bien depuis csh. Il ne m'appartient donc pas d'en changer le format.
Le fichier à lire est bien du CSH donc.
Maintenant, je pense que le plus simple serait de repérer la/les ligne(s) qui me botte dans ces fichiers et d'en faire une évaluation par un echo dans un appel system CSH, mais:
- j'aurais voulu éviter du parsing de fichier
- si justement la valeur à évaluer contient d'autres valeurs de variables de ce même fichier, je vais passer à côté.
grrr....
![:angry: :angry:](images/smileys/angry.gif)
Kim: Très exactement ma question:
http://www.linuxquestions.org/questions/programming-9/source-bash-variables-into-python-environ-551956/
(et donc très exactement la réponse que je ne voulais pas entendre...)
philfr
Si je comprends bien, tu veux lire un fichier de configuration "programmable" pour utiliser le résultat quelque part dans ton programme python.
Et tu veux qu'il soit en csh, mais tu ne veux pas le sourcer depuis csh...
Autre tentative: tu écris ton fichier de config en python ? Et tu peux y utiliser les variables d'environnement existantes ? Et tu peux l'évaluer depuis python.
Et tu veux qu'il soit en csh, mais tu ne veux pas le sourcer depuis csh...
Autre tentative: tu écris ton fichier de config en python ? Et tu peux y utiliser les variables d'environnement existantes ? Et tu peux l'évaluer depuis python.