python 将 os.environ 传递给子 gnome 终端

python pass os.environ to child gnome-terminal

我正在创建一个新的子终端并使用以下方法将其传递给调用 shell 的环境变量:

currentEnv =os.environ.copy()
print("PARENT: " + currentEnv["PATH"])
subprocess.Popen(shlex.split("sudo gnome-terminal -x bash -c 'python3 somescript.py'"), env=currentEnv)

inside somescript.py 我正在报告父给定的 $PATH:

currentEnv = os.environ.copy()
print("CHILD:" + currentEnv["PATH"])

我在父终端的输出如下:

PARENT: /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/lib:/home/myusername/bin

在子窗口中:

CHILD:/sbin:/bin:/usr/sbin:/usr/bin

因此,当子脚本调用在父 $PATH 中找到的任何可执行文件时,我在子脚本中收到很多 "command not found" 错误。

如何将父进程的环境变量传递给子进程?我认为这是默认行为?

您可能在调用 sudo

时丢失了环境变量

您可以使用 -E 开关将您的环境变量保留在 sudo 中:

来自手册:

 -E, --preserve-env

     Indicates to the security policy that the user wishes to preserve their existing environment variables.  The security policy may
     return an error if the user does not have permission to preserve the environment.

所以尝试:

currentEnv =os.environ.copy()
print("PARENT: " + currentEnv["PATH"])
subprocess.Popen(shlex.split("sudo -E gnome-terminal -x bash -c 'python3 somescript.py'"), env=currentEnv)