如何在python脚本中设置环境变量

Sri*_*ddy 2 python scons

我正在使用 SCONS 构建工具。
我无法使用在 python 脚本中初始化的环境变量。

在我的项目中,用户可以更改一些变量以与编译器一起使用。

为此,我们有 2 个文件。

  • 配置文件
  • 构建

Config.py 具有所有变量,例如包含目录、 CFLAGS 、 CPPDEFINES 等。因此,在这里我们可以设置一些变量。我需要在 Sconstruct 文件中使用这些变量。在 config.py 中我设置了一个变量,如下所示

SCONS_INC = "Include files"
os.environ["SCONS_INC"] = SCONS_INC
Run Code Online (Sandbox Code Playgroud)

我需要在 Sconstruct 文件中使用这些变量。代码是

env["CPPPATH"] = os.environ["SCONS_INC"] 
Run Code Online (Sandbox Code Playgroud)

但我收到类似未定义变量 SCONS_INC 的错误。

这个怎么做?

dar*_*rak 5

SCons 默认情况下不使用调用的环境,这是为了确保无论您的环境具有哪种配置,您都可以重现构建。

环境变量存储在 scons 环境中的 key 下,ENV因此您可以像这样访问常规环境变量:

env = Environment()
variable = env['ENV']['SomeVariable']
env['ENV']['SomeVariable'] = SomeValue
Run Code Online (Sandbox Code Playgroud)

我理解你的问题,就像你需要使用 SCons 中的 python 脚本中设置的变量一样。为此,您需要结合使用您描述的两种方法来传输它们。

env = Enviroment()
python_variable = os.environ['SomeVariable']
env['ENV']['SomeVariable'] = python_variable
Run Code Online (Sandbox Code Playgroud)

不过,我可能会推荐其他控制构建的方法,这样您就不必经历传输环境变量的麻烦。恕我直言,使用参数更简单。参数只是一个由 scons 调用生成的字典,所以当你说:

scons -D some_argument=blob
Run Code Online (Sandbox Code Playgroud)

你可以简单地通过以下方式得到这个论点:

some_variable = ARGUMENTS["some_argument"]
Run Code Online (Sandbox Code Playgroud)

当然,我不知道你为什么需要环境变量,所以这可能与你完全无关。