【问题标题】:Environment variable gets removed immediately after it is set Python环境变量在设置 Python 后立即被删除
【发布时间】:2021-02-26 17:47:22
【问题描述】:

我在 Python 中有这个简单的环境设置脚本:

import os
os.environ['API_USER'] = 'SuperUser'
os.environ['API_PASSWORD'] = 'SuperPass'

USER = os.environ.get('API_USER')
PASSWORD = os.environ.get('API_PASSWORD')

print(USER)
print(PASSWORD)

当我运行它时,我得到了这个:

SuperUser
SuperPass

到目前为止还可以,但是当我注释掉我设置用户的两行并通过并再次运行它时,我得到了这个:

None
None

为什么这两个环境变量被删除而不被保存?我想知道,一旦我设置了一些环境变量,我可以稍后再次使用它而无需再次设置它(直到我删除它们),对吧? 怎么了? 谢谢!

【问题讨论】:

  • 如果我没记错的话,在进程内设置的环境变量只能在同一个进程内使用。如果你想跨进程做这些环境变量,我认为你需要使用SETX,看这个帖子stackoverflow.com/questions/488366/…

标签: python environment-variables


【解决方案1】:

您只是为该特定运行的 Python 进程设置环境变量。一旦进程退出,变量就不再存在。您似乎无法从 Python 设置持久环境变量,如下所述:

Why can't environmental variables set in python persist?

您似乎需要 shell 执行您想要保留的任何变量,如上述问题的第二个答案中所述,如下所示:

import pipes
import random
r = random.randint(1,100)
print("export BLAHBLAH=%s" % (pipes.quote(str(r))))

编辑:

根据@SuperStormer 下面的评论——他们是正确的——这个解决方案是 Unix/Mac 特定的。如果你需要在 Windows 上完成同样的事情,你可以像这样使用setx(这将只为当前用户设置变量,你需要在末尾添加一个/m 开关以设置本地机器):

import pipes
import random
r = random.randint(1,100)
print("setx BLAHBLAH %s" % (pipes.quote(str(r))))

【讨论】:

  • pipes -> shlex(无论如何,管道导入引用的地方)。请注意,此解决方案是特定于 unix 的,windows 使用 setx 代替。
猜你喜欢
  • 2013-10-25
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2021-04-02
  • 2018-11-28
相关资源
最近更新 更多