Python脚本问题
我想从一个Python脚本中运行一个csh文件。
比如说,
#!/usr/bin/python
import os
os.system("source path/to/file.csh")
而且我希望这个文件能在和我运行Python脚本同一个环境中执行,因为这个file.csh
脚本设置了一些我需要的环境变量。
有没有人知道在Python中怎么做到这一点?
2 个回答
0
你可以这样简单处理一下:
#!/usr/bin/env python
# This is kludge.py
print "setenv VARNAME \"the value\""
在你的情况中,你可以让文件.sh打印出setenv
这一行。
然后在csh中:
$ eval `./kludge.py`
$ echo $VARNAME
the value
这样做并不是很优雅,但这是让子进程影响父进程环境的唯一方法。这是因为父进程明确允许这样做,使用了eval
。
3
子进程无法影响父进程的环境。你能做的最好的办法就是在一个单独的进程中运行你的 csh 脚本,获取它定义的环境变量,然后在你的 Python 脚本中逐个设置这些环境变量。
即使这样,Python 脚本也无法影响你运行 Python 脚本的那个 shell。
根据我所知道的,解决这个问题的常见方法是让你的脚本输出一些 shell 命令来设置环境变量,然后在主 shell 中运行这个脚本,并执行你得到的结果。
如果你想了解更多信息,可以查看这个问题:一个 shell 脚本能否设置调用它的 shell 的环境变量