【问题标题】:Reading and writing environment variables in Python? [duplicate]在 Python 中读写环境变量? [复制]
【发布时间】:2011-08-23 17:15:46
【问题描述】:

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

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

DEBUSSY 1
FSDB 1

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

【问题讨论】:

  • “德布西”是怎么回事?它也在重复的线程中。谷歌只是提供了一些法国人的信息。
  • @voithos 你真丢脸!
  • @David 什么...?好的,所以我的“法语”评论毫无意义,是的,但我仍然想知道这德比西的东西是什么。
  • 对不起,如果我听起来很懒惰。我修改脚本的时间很少,所以我求助于论坛。我喜欢读书。正是因为没有时间,我才在论坛上寻找快速解决方案
  • DEBUSSY 是一款帮助我们在设计硬件系统时查看波形的工具。我使用了现实世界的例子。我设计硬件系统,但我们使用大量脚本语言来自动化工具流程

标签: python environment-variables


【解决方案1】:

尝试使用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。

【讨论】:

  • 当我在 mac os 中尝试这种方法时,环境变量在 shell 中不可用。只有python可以读取这样设置的环境变量。
  • @openCivilisation 没错,出于安全原因,脚本应该不可能修改调用shell的环境(由shell而不是python强加)
【解决方案2】:

第一件事 :) 阅读书籍是解决问题的一种优秀方法;这是创可贴修复和解决问题的长期投资之间的区别。永远不要错过任何学习的机会。 :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 dictionary-like object 访问环境变量:

>>> 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/'

【讨论】:

  • 我同意你的看法。只是我有更少的时间来修复这个脚本并且阅读这本书需要一个星期。我将阅读 Python 书籍以获取有关 Python 编程的良好知识
  • 一个人通过做而不是阅读来学习python
【解决方案3】:

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

如果您正在写入这些变量,那就另当别论了。这涉及并发和锁定变量,除非你愿意,否则我不会深入讨论。

【讨论】:

    【解决方案4】:

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

    至于阅读,当然要自己从字符串中解析出数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2020-10-05
      • 2016-11-27
      相关资源
      最近更新 更多