Python脚本问题

0 投票
2 回答
843 浏览
提问于 2025-04-15 23:44

我想从一个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 的环境变量

撰写回答