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)
我正在创建一个新的子终端并使用以下方法将其传递给调用 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)