在Python中读写环境变量?

时间:2011-05-11 23:16:46

标签: python environment-variables

  

可能重复:
  How to set environmental variables in Python

我的python脚本调用许多python函数和shell脚本。我想在Python中设置一个环境变量(主调用函数)和所有子进程,包括shell脚本,以查看环境变量集。

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

DEBUSSY 1
FSDB 1

1是一个数字,而不是字符串。另外,如何读取存储在环境变量中的值? (与另一个python子脚本中的DEBUSSY / FSDB类似。)

4 个答案:

答案 0 :(得分:263)

尝试使用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'])

请参阅os.environ上的Python docs。另外,为了生成子进程,请参阅Python的subprocess docs

答案 1 :(得分:34)

首先要做的事情:)阅读书籍是解决问题的优秀方法;这是创可贴修复与解决问题的长期投资之间的区别。千万不要错过学习的机会。 :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)。)

使用os.environ dictionary-like object

在python中访问环境变量
>>> 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/'

答案 2 :(得分:3)

如果要将全局变量传递给新脚本,可以创建一个仅用于保存全局变量的python文件(例如globals.py)。当您在子脚本的顶部导入此文件时,它应该可以访问所有这些变量。

如果您正在写这些变量,那么这是一个不同的故事。这涉及并发和锁定变量,除非你想要,否则我不打算进入。

答案 3 :(得分:1)

使用os.environ[str(DEBUSSY)]进行阅读和撰写(http://docs.python.org/library/os.html#os.environ)。

至于阅读,当然你必须自己解析字符串中的数字。