如何将整数设置为环境变量?

时间:2014-05-29 00:14:54

标签: python windows batch-file

我正在尝试设置如下的环境变量,但是行有一个整数变量并且遇到以下错误,如何解决这个问题?还是有更好的方法来使用python设置环境变量

row = 399
os.environ['BUILD_VER'] = row

错误: -

    os.environ['BUILD_VER'] = row
  File "C:\Python27\lib\os.py", line 420, in __setitem__
    putenv(key, item)
TypeError: must be string, not int

2 个答案:

答案 0 :(得分:5)

环境变量只能包含字符串值。你必须这样做:

os.environ['BUILD_VER'] = str(row)

但是,您必须了解,您设置的任何环境变量将对Python进程及其设置后产生的任何进程生效。

例如,你可以使用Python从shell脚本设置环境变量,因为shell会生成Python,Python无法为生成它的shell设置环境变量。

如果您尝试将Windows环境变量设置为您在Python中生成的值,则应该有一个Python脚本打印该值并让您的批处理文件执行该脚本。假设您的脚本getver.py如下所示:

row = 399
print row

然后你的批处理文件会包含这样的内容:

FOR /F %v IN ('getver.py') DO SET BUILD_VER=%v

答案 1 :(得分:1)

  抱歉,我应该说清楚,我尝试了row = str(行)但环境变量没有设置

设置,但是,正如任何其他语言(包含bash)一样,您正在修改当前进程的环境变量,所以它是正常的如果你回到shell,那么更改是不可见的(相反,它会显示从脚本开始的进程,因为环境变量通常是复制到子进程)。

你无法克服这个限制;正如several other answers中所解释的那样,无法设置父进程的环境变量。周期。

人们通常做的是source一个shell脚本直接在shell中设置环境 - 脚本在当前shell下运行,从而修改其环境变量。这当然只适用于shell语言。

某些程序使用的另一种替代方法(参见例如ssh-agent)是在标准输出上打印一个设置适当变量的短shell脚本:

matteo@teokubuntu:~$ ssh-agent 
SSH_AUTH_SOCK=/tmp/ssh-xkn6jGSZAxoA/agent.5184; export SSH_AUTH_SOCK;
SSH_AGENT_PID=5185; export SSH_AGENT_PID;
echo Agent pid 5185;

然后,该程序将用作eval $(programname),它在当前shell中运行programname的输出。