如何将整数设置为环境变量?
我正在尝试设置一个环境变量,如下所示,但这行代码中有一个整数变量,导致出现了以下错误。我该如何解决这个问题?或者有没有更好的方法来用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 个回答
1
抱歉,我应该说清楚,我试过把row变成字符串,但环境变量没有被设置。
其实环境变量是有设置的,不过,就像其他编程语言(包括bash
)一样,你只是在修改当前进程的环境变量。所以,如果你回到命令行,之前的修改是看不见的(不过从你的脚本启动的进程是能看到这些修改的,因为环境变量通常会被复制到子进程中)。
你无法绕过这个限制;正如其他一些回答所解释的那样,无法设置父进程的环境变量。这是个定律。
人们通常会通过source
一个脚本来直接在命令行中设置环境变量——这个脚本是在当前的命令行下运行的,因此可以修改它的环境变量。当然,这种方法只适用于命令行语言。
还有一种替代方案,一些程序会使用(比如ssh-agent
),它会在标准输出上打印一个短小的脚本来设置相应的变量:
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)
,这样就能在当前的命令行中运行programname
的输出。
16
环境变量只能包含字符串值。你需要这样做:
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