我正在尝试设置如下的环境变量,但是行有一个整数变量并且遇到以下错误,如何解决这个问题?还是有更好的方法来使用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
答案 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
的输出。