Java 从python脚本设置环境变量

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的内容,并根据需要添加您自己的

我使用的是c-shell,我习惯于使用setenv。我需要在python脚本中执行等效命令。我尝试使用os.environ['JAVA_HOME']=“/usr/local/JAVA”,它可以从python解释器中工作,但是当我的脚本从命令行执行时,它运行的shell确实反映了新设置的环境变量。有人能帮忙吗,我不熟悉脚本编写,我希望我能把我的问题说清楚。

如果您正在使用,将
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()