os.environ['PYTHONHOME']="/home/user/OpenPrint/py2.6"
Pythonスクリプトで設定しています
しかし、別の場所から別の Python スクリプトを呼び出せるように、スクリプトの最後でこの変数をクリアする必要があります。誰かがそれを行う方法を教えてもらえますか? 試しos.environ.clear()
ましたが、他のすべての変数もクリアされます。
os.environ['PYTHONHOME']="/home/user/OpenPrint/py2.6"
Pythonスクリプトで設定しています
しかし、別の場所から別の Python スクリプトを呼び出せるように、スクリプトの最後でこの変数をクリアする必要があります。誰かがそれを行う方法を教えてもらえますか? 試しos.environ.clear()
ましたが、他のすべての変数もクリアされます。
試す
del os.environ["PYTHONHOME"]
これにより、os.environ dict から変数「PYTHONHOME」が削除されます。
呼び出されているスクリプトに対してのみ環境変数の設定を解除するには、次の方法も機能します。
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
ことは、それが設定されているプロセス(およびその子プロセス)に対してのみローカルです。最後にわかるように、グローバル環境変数には影響しません。