views:

55

answers:

3

I want to run a csh file from a python script,

example,

#!/usr/bin/python
import os

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

and I want this file to run in the same shell as I am running the python script, because the file.csh script is settings some environment variables that I need.

Does anyone know how to do this in Python?

A: 

Hi,

What if you set the environmental vars by using 'os.environ' instead?

Like so:

...

os.environ['MY_VAR']='LIVE_FREE_OR_DIE'

...

/JGR

jgr
+1  A: 

A child process cannot affect the environment of the parent process. The best you can do is to run your csh script in a separate process, get the environment variables that it defines, then set each environment variable in your python script.

Even with that, the python script won't be able to affect the shell in which you run the python script.

The common way to solve this (AFAIK) is to have your script emit shell commands to set the environment, then from the main shell you run the script and eval what you get back.

For more information you might want to check out this question: can a shell script set environment variables of the calling shell

Bryan Oakley
A: 

You can kludge it this way:

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

print "setenv VARNAME \"the value\""

In your case, you can have the file.sh print the setenv line.

Then from csh:

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

This isn't clean, but it is the only way to have a child process effect the environment of its parent. This is only because the parent process is explicitly letting it happen with eval.

James Roth