我相信在稍加修改的环境下运行外部命令是非常常见的情况。我就是这么做的:

import subprocess, os
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)

我有一种直觉,有更好的方法;看起来还好吗?


当前回答

我知道这个问题已经回答了一段时间了,但是对于在环境变量中使用PYTHONPATH而不是PATH,有些人可能想知道一些问题。我已经概述了使用cronjobs运行python脚本的解释,它以不同的方式处理修改后的环境(可以在这里找到)。我认为这对那些像我一样需要比这个答案更多一点的人来说是有好处的。

其他回答

我认为os. environment .copy()更好,如果你不打算修改操作系统。当前过程的环境:

import subprocess, os
my_env = os.environ.copy()
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)

参数env接受一个字典。你可以简单地取os。environ,添加一个键(你想要的变量)(到dict的副本,如果你必须),并使用它作为Popen的参数。

你可以使用my_env。get("PATH", ")而不是my_env["PATH"],以防PATH在原始环境中没有定义,但除此之外它看起来很好。

我知道这个问题已经回答了一段时间了,但是对于在环境变量中使用PYTHONPATH而不是PATH,有些人可能想知道一些问题。我已经概述了使用cronjobs运行python脚本的解释,它以不同的方式处理修改后的环境(可以在这里找到)。我认为这对那些像我一样需要比这个答案更多一点的人来说是有好处的。

在某些情况下,您可能只想传递子进程所需的环境变量,但我认为您的想法大体是正确的(这也是我的做法)。