通过python脚本设置shell环境变量

Ser*_*yan 6 python bash shell

我有一些需要环境变量的工具,我想从python代码自动设置.所以我尝试了几种方法来实现它,但它们都没有成功.这里有些例子:

  1. 我在我的python脚本中插入以下代码

    import os
    os.system("export ENV_VAR=/some_path")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我创建了bash脚本(env.sh)并从python运行它:

    #!/bin/bash
    export ENV_VAR=some_path
    
    #call it from python
    os.system("source env.sh")
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我也试过os.putenv()os.environ ["ENV_VAR"] ="some_path"

是否可以使用python设置(导出)环境变量,即不直接将其导出到shell?

kin*_*all 15

设置环境变量仅为当前进程及其启动的任何子进程设置它.因此,使用os.system将仅为正在运行的shell设置它以执行您提供的命令.当该命令完成时,shell会消失,环境变量也会消失.使用它os.putenvos.environ具有类似的效果; 为Python进程及其任何子进程设置环境变量.

我假设您正在尝试为从您或全局启动脚本的shell设置这些变量.这是行不通的,因为shell(或其他进程)不是您设置变量的Python脚本的子代.

您可以更好地在shell脚本中设置变量.如果你接着source那个脚本(以便它在shell的当前实例中运行,而不是在子shell中运行)那么它们将在脚本结束后保持设置状态.


thi*_*er3 9

shell 函数可以执行此操作。您需要打印出口声明并对其进行评估。

set_shell_env() {
    output=$(python print_export_env.py $*)
    eval $output
}
Run Code Online (Sandbox Code Playgroud)

  • 这个问题唯一好的答案!这里的其他男孩和女孩只是试图教育提问者。没有人问对与错...我们只是想在Python中设置环境变量...有什么难理解的?! (8认同)
  • 这就是我喜欢这个网站的原因。完全不安全的答案,但效果很好 (4认同)

Sta*_*kop 5

只要您从完全相同的过程中启动“工具”(我认为是脚本),它就应该起作用:

In [1]: os.putenv("VARIABLE", "123")

In [2]: os.system("echo $VARIABLE")
123
Run Code Online (Sandbox Code Playgroud)

您不能更改其他进程或父进程的环境变量。