python脚本的问题

时间:2010-06-09 13:55:11

标签: python subprocess

我想从python脚本运行一个csh文件,

例如,

#!/usr/bin/python
import os

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

我希望这个文件在运行python脚本的同一个shell中运行,因为file.csh脚本设置了一些我需要的环境变量。

有人知道如何在Python中执行此操作吗?

2 个答案:

答案 0 :(得分:3)

子进程不能影响父进程的环境。您可以做的最好的事情是在一个单独的进程中运行csh脚本,获取它定义的环境变量,然后在python脚本中设置每个环境变量。

即使这样,python脚本也无法影响运行python脚本的shell。

解决此问题的常用方法(AFAIK)是让您的脚本发出shell命令来设置环境,然后从主shell运行脚本并评估您获取的内容。

有关详细信息,您可以查看以下问题:can a shell script set environment variables of the calling shell

答案 1 :(得分:0)

你可以用这种方式来克服它:

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

print "setenv VARNAME \"the value\""

在您的情况下,您可以让file.sh打印setenv行。

然后从csh:

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

这不是很干净,但它是让子进程影响其父进程环境的唯一方法。这只是因为父进程明确地允许eval发生。