2011-05-11 110 views
87

可能重複:
How to set environmental variables in Python設置/讀取環境變量

我的Python腳本,它調用許多Python函數和shell腳本。我想在Python中設置一個環境變量(主調用函數)和包括shell腳本在內的所有子進程來查看環境變量集。

我需要設置一些環境變量是這樣的:

DEBUSSY 1 
FSDB 1 

1是一個數字,而不是字符串。另外,如何讀取存儲在環境變量中的值? (在另一個python子腳本中與DEBUSSY/FSDB相似。)

+11

什麼是「DEBUSSY」的東西?它也在複製線程中。谷歌只是提供一些法國人的信息。 – voithos 2011-05-11 23:41:07

+13

@voithos恥辱你! – 2011-05-11 23:50:30

+0

@大衛什麼?好的,所以我的「法國人」評論毫無意義,是的,但我仍然想知道這件事情是什麼。 – voithos 2011-05-11 23:53:36

回答

179

嘗試使用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.environPython docs。另外,爲了產生子進程,請參閱Python的subprocess docs

29

第一件事第一:)看書是優秀解決問題的辦法;它是解決問題中的創可貼修復和長期投資之間的區別。不要錯過學習的機會。 :D

您可能會選擇來將1解釋爲數字,但環境變量並不在意。他們只是傳遞字串:(從environ(3posix))使用

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. 

在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/' 
+0

我同意你的意見。只是我沒有多少時間來修復這些腳本,閱讀這本書需要一週的時間。我將閱讀Python書籍,以獲得關於Python編程的豐富知識 – user749632 2011-05-12 01:35:03

3

如果你想傳遞的全局變量到新的腳本,你可以創建一個僅用於保存全局變量的python文件(例如globals.py)。當您在子腳本的頂部導入此文件時,它應該可以訪問所有這些變量。

如果你正在寫這些變量,那麼這是一個不同的故事。這涉及併發性和鎖定變量,除非你想要,否則我不會介入。