【问题标题】:Setting environment variables for the curent termial session through python通过python为当前终端会话设置环境变量
【发布时间】:2021-03-07 11:16:35
【问题描述】:

我正在尝试编写一个基于用户输入设置环境变量的 python 脚本。我可以通过键入常规 export myVar='value' 在终端中手动设置环境变量。如果我输入 echo $myVar 我会得到结果“值”。到目前为止一切顺利。

我有这个脚本:

import os
os.environ['myVar'] = 'value'

如果我在 python 会话中打印变量,我会看到该变量。但是,如果我退出 python 并且只执行相同的 echo $myVar 我看不到变量。 好的,所以该变量只是当前 python 会话的一部分,它实际上并没有在终端中执行,所以我尝试了其他方法:

import os
os.system('export myVar=value')

这也无济于事。我没有在终端中得到变量。

例如,如果我尝试这个:

import os
os.system('gedit')

我开始使用 gedit。所以 os.system 有效。但是为什么它不想设置变量呢?

我认为这是我尝试 bashcript 的 python 限制

echo "Setting variable"
export myVar='value'

将其保存为 var.sh,使用 chmod +x 使其可执行并使用 ./var.sh 运行 依然没有。没有变量集。奇怪的是,如果我直接在终端中输入相同的内容,它可以工作,但不是通过 bash 脚本。 我还在某处看到您必须先获取它。所以我创建了另一个这样的 bash 脚本:

source var.sh
echo $myVar

仍然没有设置变量。我在这里错过了什么?

我在 popOS 20.04 上使用 python3.8.5

谢谢!

【问题讨论】:

    标签: python-3.x linux variables environment-variables


    【解决方案1】:

    您可以在脚本中设置它,但您不会在该脚本中看到它的效果。 https://www.howtogeek.com/668503/how-to-set-environment-variables-in-bash-on-linux

    #! /usr/bin/env python3
    import os
    
    os .system( 'echo MYVAR=value >> ~/.bashrc' )
    os .system( 'exec bash' )
    

    如果这就是你想要的,你会在之后从命令行看到它。

    echo $MYVAR
    
    value
    

    还原:

    os .system( "sed -i '/MYVAR=/d' ~/.bashrc" )
    os .system( 'unset MYVAR' )
    

    【讨论】:

      【解决方案2】:

      您缺少的是对 UNIX 进程模型的理解。在类 UNIX 操作系统(包括 Linux)中,某些属性与特定进程相关联,例如交互式 shell。这些属性包括 CWD(当前工作目录)和环境变量之类的东西。进程不能直接更改不同进程的属性(例如,环境变量)。当您启动一个新进程时,它通常会继承当前进程的环境变量的副本。因此,当您运行 Python 程序时,会启动一个新进程。当您修改该进程的环境变量时,它不会影响其父进程(您的外壳)的环境变量。环境变量不是“全局的”。根据定义,您尝试做的事情是不可能的。

      【讨论】:

        猜你喜欢
        • 2017-10-12
        • 1970-01-01
        • 2019-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        • 2020-07-15
        • 2016-12-23
        相关资源
        最近更新 更多