Python与环境

2024-10-03 19:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下内容的文件(myenv.sh

export MYVAR="HELLO"

然后我有了我的程序(myhugeprogram.py):

^{pr2}$

可执行文件:chmod 755 myhugeprogram.py

现在我获取我的环境:source myenv.sh

运行我的程序:

./myhugeprogram.py
HELLO

一如预期。现在我通过SSH以非交互方式运行它:

user1@host1:~$ ssh user2@host2 ./myhugeprogram.py
Traceback (most recent call last):
  File "./myhugeprogram.py", line 3, in <module>
    print os.environ['MYVAR']
  File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__
    raise KeyError(key)
KeyError: 'MYVAR'

这很正常,因为我没有找到myenv.sh。现在的问题是:

在通过SSH以非交互方式运行Python脚本之前,如何获取一个Bash文件来设置一些环境变量?在


Tags: 文件inpy程序helloshlineexport
3条回答

您应该在脚本本身中导出/源化变量

因为如果打开SSH和fire source命令的一个会话,那么使用另一个会话来执行脚本

环境变量将不可用,因为将再次加载整个新环境。在

您可以使用os.environ["ASD"] = "asd"语法为脚本设置环境变量。在

编写一个shell脚本包装器(在两个环境中都可见),该包装器设置环境并调用程序以及所有参数。您可以使这个shell脚本智能化,以便它只根据当前环境设置环境,所以您只需要调用该包装器脚本,而不管您的上下文如何,并且可以将其视为一个黑匣子。在

我可以想到两种方法:

  • 例如,在运行的ssh命令中包含source命令

    ssh user2@host2 "source myenv.sh; ./myhugeprogram.py"
    
  • ^{}文件中设置环境变量。

相关问题 更多 >