15

os.environ['PYTHONHOME']="/home/user/OpenPrint/py2.6"Pythonスクリプトで設定しています

しかし、別の場所から別の Python スクリプトを呼び出せるように、スクリプトの最後でこの変数をクリアする必要があります。誰かがそれを行う方法を教えてもらえますか? 試しos.environ.clear()ましたが、他のすべての変数もクリアされます。

4

3 に答える 3

23

使用する

os.environ.pop("PYTHONHOME")

http://docs.python.org/2/library/os.htmlの (最小限の) ドキュメントを参照してください。

于 2013-08-12T00:22:11.987 に答える
22

試す

del os.environ["PYTHONHOME"]

これにより、os.environ dict から変数「PYTHONHOME」が削除されます。

于 2013-08-12T00:22:07.687 に答える
4

呼び出されているスクリプトに対してのみ環境変数の設定を解除するには、次の方法も機能します。

os.unsetenv('PYTHONHOME')

アップデート:

フローの残りの環境を削除する必要がある場合、os.environ.pop('PYTHONHOME')またはdel os.environ['PYTHONHOME']より良いです。ただし、最後にフォークするスクリプトの環境変数のみを設定解除する場合はos.unsetenv('PYTHONHOME')、環境変数が現在のプロセス環境に保持されるため、より適切に機能します。ただし、スクリプトの呼び出し方法にも依存します。

Pythonのドキュメントは言う

key という名前の環境変数を設定解除 (削除) します。os.system()このような環境の変更は、 、popen()または fork()およびで始まるサブプロセスに影響しexecv()ます。

以下の例を参照してください。

サンプルスクリプト (/tmp/env.py)

import os
print os.environ["VIFI"]

それでは続きを見ていきましょう。

vifi-a01:~ vifi$ python
Python 2.7.16 (default, Oct 16 2019, 00:34:56)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> 'VIFI' in os.environ   # EnvVar not present initially.
False
>>> os.environ['VIFI'] = 'V' # set the env var
>>> os.system('python /tmp/env.py')  # child process/script gets it
V
0
>>> os.unsetenv('VIFI')   # unset env only for child script
>>> os.system('python /tmp/env.py')
Traceback (most recent call last):
  File "/tmp/env.py", line 2, in <module>
    print os.environ["VIFI"]
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'VIFI'
256
>>> 'VIFI' in os.environ    # rest of the flow still has it 
True
>>> os.environ['VIFI'] = 'V'  # set it again for child process/script
>>> os.system('python /tmp/env.py') 
V
0
>>>
>>> os.environ["VIFI"] = "V"  
>>> ^D
vifi-a01:~ vifi$ echo $VIFI

vifi-a01:~ vifi$ printenv | grep "VIFI"
vifi-a01:~ vifi$

ところで、環境を設定するos.environことは、それが設定されているプロセス(およびその子プロセス)に対してのみローカルです。最後にわかるように、グローバル環境変数には影響しません。

于 2016-10-26T16:09:14.010 に答える