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

时间:2014-09-05 10:58:02

标签: python

是否可以通过简单地将其设置为这样的新值来更改当前流程?

os.environ['PYTHONHASHSEED'] = 'random'

1 个答案:

答案 0 :(得分:11)

这取决于你的意思。

如果您的意思是更改当前解释器的行为而不是 no

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

  2. 启动解释器时仅检查环境变量,因此之后更改它们对当前python实例不会产生任何影响。来自the documentation

      

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

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

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

    如果你的意思是让当前解释器产生的新进程表现得像以前设置的那样,那么假设你正在运行支持putenv 的平台。在生成新进程时,默认情况下,它会继承当前进程的环境。您可以使用简单的脚本对此进行测试:

    #check_environ.py
    import os
    import subprocess
    
    os.environ['A'] = '1'
    proc = subprocess.call(['python', '-c', 'import os;print(os.environ["A"])'])
    

    哪个收益率:

    $ python check_environ.py
    1
    

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