可以在应用程序中动态设置os.environ ['PYTHONHASHSEED']吗?

Bob*_*Bob 7 python

只需将其设置为这样的新值,是否可以为当前流程更改?

os.environ['PYTHONHASHSEED'] = 'random'
Run Code Online (Sandbox Code Playgroud)

Bak*_*riu 11

这取决于你的意思.

如果你的意思是改变当前解释器的行为而不是答案是否定的:

  1. 修改os.environ不可靠,因为在某些操作系统中,您无法修改环境(请参阅文档os.environ).

  2. 在启动解释器时检查环境变量,因此之后更改它们将不会对当前python实例产生任何影响.从文档:

    这些环境变量会影响Python的行为,它们会在命令行切换之前处理,而不是-E-I.

    (这意味着只有在启动解释器时才会检查它们,在运行任何用户代码之前).

AFAIK,无法动态设置随机散列种子,因此如果要激活散列随机化,则必须重新启动解释器.

如果你的意思,使新工艺由当前解释催生的行为如同该值前设置,然后是的, 假设你是一个支持的平台上运行putenv.在生成新进程时,默认情况下,它会继承当前进程的环境.您可以使用简单的脚本对此进行测试:

#check_environ.py
import os
import subprocess

os.environ['A'] = '1'
proc = subprocess.call(['python', '-c', 'import os;print(os.environ["A"])'])
Run Code Online (Sandbox Code Playgroud)

产量:

$ python check_environ.py
1
Run Code Online (Sandbox Code Playgroud)

请注意,在putenv实现中存在已知的错误(例如,在Mac OS X中),它会泄漏内存.因此,您希望尽可能避免修改环境.

  • 使用`subprocess.call`,您可以通过传递显式的扩充环境来修改环境.`e = dict(os.environ); e.update(PYTHONHASHSEED = '随机'); subprocess.call([...],env = e)` (2认同)