我想从python脚本运行一个csh文件,
例如,
#!/usr/bin/python
import os
os.system("source path/to/file.csh")
我希望这个文件在运行python脚本的同一个shell中运行,因为file.csh
脚本设置了一些我需要的环境变量。
有人知道如何在Python中执行此操作吗?
答案 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
发生。