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

13 投票
2 回答
34496 浏览
提问于 2025-04-18 07:53

我正在尝试设置一个环境变量,如下所示,但这行代码中有一个整数变量,导致出现了以下错误。我该如何解决这个问题?或者有没有更好的方法来用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

撰写回答