2012-04-06 75 views
0

我有一个文件(myenv.sh)具有以下内容Python和环境

export MYVAR="HELLO" 

然后,我有我的节目(myhugeprogram.py):

#!/usr/bin/env python 
import os 
print os.environ['MYVAR'] 

这是可执行文件:chmod 755 myhugeprogram.py

现在我来源我的环境:source myenv.sh

和运行我的程序:

./myhugeprogram.py 
HELLO 

正如预期的那样。现在,我通过SSH运行非交互:

[email protected]:~$ ssh [email protected] ./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文件?

回答

3

两种方式我能想到的:

  • 包括在您运行ssh命令源命令,例如

    ssh [email protected] "source myenv.sh; ./myhugeprogram.py" 
    
  • .bashrc文件中设置环境变量。

0

编写一个shell脚本包装器(在两种环境中都可见),它们设置环境并将程序和所有参数一起调用。你可以使这个shell脚本智能化,以便它只根据当前的环境设置环境,所以你只需要调用这个包装脚本而不管你的上下文是什么,并且可以像黑盒子一样对待它。

0

,你应该导出/源在你的脚本本身的变量,

,因为如果你打开SSH和火源命令的会话,然后使用该脚本的执行另一个会话,

环境变量将无法使用,因为整个新环境会再次加载。

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