【问题标题】:Getting os.environ to work with Python run via NSSM通过 NSSM 让 os.environ 与 Python 一起工作
【发布时间】:2019-05-23 01:26:30
【问题描述】:

我遇到了环境变量不匹配的问题。

我通过一个名为 NSSM 的程序在 Windows 10 上运行 Python 脚本。

在运行时,我执行以下操作:

  1. 从文本文件中加载参数
  2. 使用os.environ.setdefault(name, value)将其内容放入环境中。
  3. 尝试使用os.environ[name]加载环境变量

结果:我添加的任何变量都显示出来。

我不确定为什么我添加的变量不可用。 你能告诉我我做错了什么吗?

首先,NSSM 使用来自 Windows HKLM 注册表的环境变量:source(见底部)。我不确定这是否是os.environ 看不到相关变量的原因。

【问题讨论】:

  • 请提供重现问题的简化示例。我在 Python 2.7 和 3.7 中使用os.environ.setdefault 为当前进程和子进程添加环境变量没有问题,所以你在这里所做的事情一定有什么特别之处,或者对你正在尝试的事情有一些误解去做。

标签: python windows environment-variables python-os nssm


【解决方案1】:

我过去也曾在使用 os.environ.setdefault 时遇到过麻烦。相反,假设您尝试添加到 PATH 环境变量,请执行以下操作:

os.environ['PATH'] += ";" + the_path_to_the_file

编辑:

另外,用于创建新变量:

os.environ['new_var'] = 'text'

【讨论】:

    【解决方案2】:

    原来我的问题超出了这个问题的范围。 @Recessive 和 @eryksun 谢谢你们俩的回答,这让我“闻到了气味”。

    原来我的问题是使用 Python pathlib 的 Path.home()

    • 通过命令提示符运行时,它会拉取HOMEPATH 环境变量。
    • 通过 NSSM 运行时,它会拉取 USERPROFILE 环境变量。

    Path.home() 中的这种差异是真正的问题。它没有找到环境变量,因为 NSSM 在一个完全不同的文件夹中查找。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2013-04-13
      • 2018-03-31
      相关资源
      最近更新 更多