Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用os.ENVIRO.get读取PowerShell设置的环境变量_Python_Powershell_Environment Variables - Fatal编程技术网

Python 无法使用os.ENVIRO.get读取PowerShell设置的环境变量

Python 无法使用os.ENVIRO.get读取PowerShell设置的环境变量,python,powershell,environment-variables,Python,Powershell,Environment Variables,这里有点随机问题。我使用PowerShell设置了一个环境变量,如下所示: $env:GOOGLE_ELEVATION_API="the_api-key" 然后在python中,我尝试使用以下简单脚本阅读它: from os import environ key = environ.get("GOOGLE_ELEVATION_API") 这将返回None。如果我在PowerShell中查询环境变量,它就在那里。如果我通过python用os.envir

这里有点随机问题。我使用PowerShell设置了一个环境变量,如下所示:

$env:GOOGLE_ELEVATION_API="the_api-key"
然后在python中,我尝试使用以下简单脚本阅读它:

from os import environ

key = environ.get("GOOGLE_ELEVATION_API")
这将返回
None
。如果我在PowerShell中查询环境变量,它就在那里。如果我通过python用
os.environ
查询它,它不是

我发现的所有结果都没有提到这应该是一个问题,无论是在PowerShell方面还是python方面。我没有重新启动我的机器,因为我真的不相信这是应该做的。我确实重新启动了IDE,希望它能以某种方式缓存环境,但谢天谢地,它没有

任何指针都会很棒

  • 通过PowerShell的
    $env:
    命名空间设置环境变量仅为当前进程定义它

    • 但是,任何直接从PowerShell会话调用的Python脚本都会看到这样的变量,因为子进程继承调用方的环境变量
  • 要在所有进程都能看到的计算机级别持久定义Windows环境变量,必须直接使用.NET API(从PowerShell 7.1开始):

请注意,只有未来的PowerShell会话才会看到此变量,并且需要重新启动应用程序才能看到新变量通常也适用于其他正在运行的应用程序

(例外情况是那些主动侦听
WM_SETTINGCHANGE
消息并刷新其环境作为响应的应用程序,这是Windows GUI外壳(
explorer.exe
)所做的。)


有关在Windows上持久设置环境变量的详细信息,请参阅。

$env:
Ah。对当我从IDE中的PowerShell终端运行此命令时,它会工作。但在单独的PSD窗口中,它不会。使变量在机器范围内可用的正确方法是什么?(我想我也可以快速查找。)@MathiasR.Jessen:environment变量存在于进程级别(try
$env:FOO='bar';Start-ThreadJob{$env:FOO}| Receive-Job-Wait-AutoRemoveJob
-也许这就是您的意思,但请注意,单个进程可以承载多个PowerShell运行空间)。定期调用的Python脚本将自动继承调用PowerShell会话的环境变量。@mklement0 Ack,但我怀疑它不起作用,因为PowerShell没有启动Python:-)谢谢,@Paul-我已更新了答案,以便在需要重新启动应用程序时更清楚地说明问题(大部分时间都是这样)。
# Note: Requires ELEVATION, due to setting at the *machine* level.
[Environment]::SetEnvironmentVariable('GOOGLE_ELEVATION_API', 'the_api-key', 'Machine')