[解決済み] python os.environ, os.putenv, /usr/bin/env
質問
を確保したい。
os.system('env')
特定の変数が含まれない
myname
でエクスポートされる
~/.bashrc
として
export myname=csj
そこで、以下のようなPythonのコードを書きました。
import os
def print_all():
print "os.environ['myname']=%s" % os.environ.get('myname')
print "os.getenv('myname')=%s" % os.getenv('myname')
os.system('env | grep myname')
print
def delete_myname():
if 'myname' in os.environ: os.environ.pop('myname')
if os.getenv('myname'): os.unsetenv('myname')
print_all()
os.putenv('myname', 'csj2')
print "---------------------"
delete_myname()
print_all()
os.putenv('myname', 'csj3')
print "---------------------"
delete_myname()
print_all()
という2つの項目を検討する必要があると思います。
os.environ['myname']
と
os.getenv('myname')
を実行し、存在すれば削除する。
を確保することができます。
os.system('env | grep myname')
は何も得られない。
ところが、その結果は
os.environ['myname']=csj
os.getenv('myname')=csj
myname=csj
---------------------
os.environ['myname']=None
os.getenv('myname')=None
---------------------
os.environ['myname']=None
os.getenv('myname')=None
myname=csj3
なぜか、まだ
csj3
で
os.system('env | grep myname')
?
解決方法は?
からの ドキュメント :
注 putenv()を直接呼び出してもos.environは変更されないので、os.environを修正した方が良い。
について
unsetenv
同様のワーニングがあります。
しかし、unsetenv() の呼び出しは os.environ を更新しないので、実際には os.environ のアイテムを削除することが望ましいです。
getenv
から値を返すだけです。
os.environ
であるため
の実装では
というように、実際の環境では設定されているのに、pythonから調べると値が設定されていないように見えるという状態に陥ります。今考えられる唯一の方法は、ctypesを使ってcのgetenv関数を呼び出すことでしょうか...。
もし私があなたのコードを修正して
os.environ
を呼び出す代わりに
putenv
/
unsetenv
はすべて期待通りに動作します。
import os
def print_all():
print "os.environ['myname']=%s" % (os.environ['myname'] if 'myname' in os.environ else "None")
os.system('env | grep myname')
print
def delete_myname():
if 'myname' in os.environ: os.environ.pop('myname')
print_all()
os.environ['myname'] = 'csj2'
print "---------------------"
print_all()
delete_myname()
print_all()
os.environ['myname'] = 'csj3'
print "---------------------"
print_all()
delete_myname()
print_all()
を出力します。
$ myname=somevalue python2 test.py
os.environ['myname']=somevalue
myname=somevalue
---------------------
os.environ['myname']=csj2
myname=csj2
os.environ['myname']=None
---------------------
os.environ['myname']=csj3
myname=csj3
os.environ['myname']=None
関連
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法