2010-06-09 5 views
0

Je veux exécuter un fichier csh à partir d'un script python,avec script python

exemple,

#!/usr/bin/python 
import os 

os.system("source path/to/file.csh") 

et je veux que ce fichier pour l'exécuter dans la même enveloppe que je courais le script python , parce que le script file.csh est les paramètres de certaines variables d'environnement dont j'ai besoin.

Est-ce que quelqu'un sait comment faire cela en Python?

+0

et je veux exécuter le fichier.csh avec la commande source mais il n'est pas wokring correct, os.system ("source chemin/vers/fichier.csh") – hidayat

+0

jeter un oeil à ['subprocess'] (http://docs.python.org/library/subprocess.html) module – SilentGhost

Répondre

3

Un processus enfant ne peut pas affecter l'environnement du processus parent. Le mieux que vous puissiez faire est d'exécuter votre script csh dans un processus séparé, d'obtenir les variables d'environnement qu'il définit, puis de définir chaque variable d'environnement dans votre script python.

Même avec cela, le script python ne pourra pas affecter le shell dans lequel vous exécutez le script python. La manière courante de résoudre ce problème (AFAIK) est que votre script émette des commandes shell pour définir l'environnement, puis à partir du shell principal, exécutez le script et évaluez ce que vous obtenez.

Pour plus d'informations, vous pouvez consulter cette question: can a shell script set environment variables of the calling shell

0

Vous pouvez kludge cette façon:

#!/usr/bin/env python 
# This is kludge.py 

print "setenv VARNAME \"the value\"" 

Dans votre cas, vous pouvez avoir le file.sh imprimer la ligne setenv .

Puis, à partir csh:

$ eval `./kludge.py` 
$ echo $VARNAME 
the value 

Ce n'est pas propre, mais il est le seul moyen d'avoir un effet de processus enfant l'environnement de son parent. C'est seulement parce que le processus parent laisse explicitement cela se produire avec eval.