Java 从python脚本设置环境变量
我使用的是c-shell,我习惯于使用setenv。我需要在python脚本中执行等效命令。我尝试使用os.environ['JAVA_HOME']=“/usr/local/JAVA”,它可以从python解释器中工作,但是当我的脚本从命令行执行时,它运行的shell确实反映了新设置的环境变量。有人能帮忙吗,我不熟悉脚本编写,我希望我能把我的问题说清楚。如果您正在使用,将Java 从python脚本设置环境变量,java,python,environment-variables,csh,Java,Python,Environment Variables,Csh,我使用的是c-shell,我习惯于使用setenv。我需要在python脚本中执行等效命令。我尝试使用os.environ['JAVA_HOME']=“/usr/local/JAVA”,它可以从python解释器中工作,但是当我的脚本从命令行执行时,它运行的shell确实反映了新设置的环境变量。有人能帮忙吗,我不熟悉脚本编写,我希望我能把我的问题说清楚。如果您正在使用,将env参数传递给构造函数就足够了,作为字典传递给您所需的任何内容(您可以复制os.environ的内容,并根据需要添加您自己的
env
参数传递给构造函数就足够了,作为字典传递给您所需的任何内容(您可以复制os.environ
的内容,并根据需要添加您自己的环境变量)。如中所述,在任何进程(如Python脚本)中设置环境变量都不会影响任何父进程(如执行Python脚本的csh进程)
您可以做的是让Python脚本打印一个setenv
命令,然后将shell中的输出作为命令进行计算
例如:
csh% cat foo.py
#!/usr/bin/python
import os;
os.environ["JAVA_HOME"] = "/usr/local/java"
print "setenv JAVA_HOME", os.environ["JAVA_HOME"]
csh% ./foo.py
setenv JAVA_HOME /usr/local/java
csh% echo $JAVA_HOME
JAVA_HOME: Undefined variable.
csh% eval `./foo.py`
csh% echo $JAVA_HOME
/usr/local/java
csh%
你可以在你的
~/.cshrc
中设置一个别名来执行评估`……`
,或者直接从你的.cshrc
或.login
中调用它(这取决于你试图完成的任务)。我知道这个问题已经有一段时间了,但我解决的方法有点不同。
也许这甚至不是最漂亮的解决方案,但它确实有效
我创建了一个名为env.sh的shell脚本
#!/bin/tcsh
eval $*
然后在我的名为subprocess的python脚本中。
这对我来说很有用,别忘了通过执行“chmod+x env.sh”使env.sh成为可执行文件。replicate of?有趣的是,你实际上称它为
env.sh
,它是从开始的/bin/tcsh
。
output = subprocess.Popen(["env.sh", "setenv", "DISPLAY", "remhost:0"], stdout = subprocess.PIPE).communicate()[0].split()