在Python中读取和写入环境变量?

184 投票
4 回答
408882 浏览
提问于 2025-04-16 17:28

我有一个Python脚本,这个脚本会调用很多Python函数和shell脚本。我想在Python中设置一个环境变量(在主调用函数里),让所有的子进程,包括那些shell脚本,都能看到这个设置的环境变量。

我需要这样设置一些环境变量:

DEBUSSY 1
FSDB 1

1是一个数字,不是字符串。另外,我该如何读取存储在环境变量中的值呢?(比如在另一个Python子脚本中读取DEBUSSYFSDB的值。)

4 个回答

3

如果你想把全局变量传递到新的脚本里,可以创建一个专门用来存放全局变量的Python文件,比如叫做globals.py。当你在子脚本的开头导入这个文件时,它就可以访问里面的所有变量。

不过,如果你要对这些变量进行写操作,那就有点复杂了。这涉及到多个程序同时使用这些变量的问题,还需要对变量进行锁定。我就不详细讲这个了,除非你想了解。

39

首先,阅读书籍是解决问题的一个非常好的方法;这就像是短期的应急处理和长期的解决方案之间的区别。不要错过任何学习的机会。:D

你可能会选择1看作一个数字,但环境变量并不在乎这些。它们只是传递字符串:

   The argument envp is an array of character pointers to null-
   terminated strings. These strings shall constitute the
   environment for the new process image. The envp array is
   terminated by a null pointer.

(来自environ(3posix)。)

在Python中,你可以通过使用os.environ这个字典样的对象来访问环境变量:

>>> import os
>>> os.environ["HOME"]
'/home/sarnold'
>>> os.environ["PATH"]
'/home/sarnold/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
>>> os.environ["PATH"] = os.environ["PATH"] + ":/silly/"
>>> os.environ["PATH"]
'/home/sarnold/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/silly/'
342

试试使用 os 模块。

import os

os.environ['DEBUSSY'] = '1'
os.environ['FSDB'] = '1'

# Open child processes via os.system(), popen() or fork() and execv()

someVariable = int(os.environ['DEBUSSY'])

可以查看 Python文档 中关于 os.environ 的内容。另外,如果你想要创建子进程,可以参考Python的 subprocess文档

撰写回答