web-dev-qa-db-ja.com

Pythonで環境変数を読み書きする?

重複している可能性があります:
Pythonで環境変数を設定する方法

私のpythonスクリプトは多くのpython関数とシェルスクリプトを呼び出します。環境変数をPython(メイン呼び出し関数)とシェルスクリプトを含むすべてのドータープロセスで設定して、環境変数セットを確認します。

私はこのような環境変数をいくつか設定する必要があります。

DEBUSSY 1
FSDB 1

1は数値であり、文字列ではありません。また、環境変数に格納されている値を読み取る方法を教えてください。 (別のpython子スクリプトのDEBUSSY/FSDBのように)

131
user749632

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の サブプロセスドキュメント を参照してください。

265
voithos

まず最初に:)本を読むことは問題解決のための優れたアプローチです。それはバンドエイドの修正と問題解決への長期的な投資の違いです。学ぶ機会を逃さないでください。 :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辞書風オブジェクト を使って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/'
34
sarnold

グローバル変数を新しいスクリプトに渡したい場合は、グローバル変数を保持することのみを目的としたpythonファイル(例:globals.py)を作成できます。このファイルを子スクリプトの先頭にインポートすると、これらの変数すべてにアクセスできるようになります。

あなたがこれらの変数に書いているなら、それはそれから別の話です。これには並行性と変数のロックが含まれます。

3
systemizer

読み書きの両方にos.environ[str(DEBUSSY)]を使用してください( http://docs.python.org/library/os.html#os.environ )。

読むことに関しては、あなたはもちろんあなた自身で文字列から数を解析しなければなりません。

1
piro