要保持Popen调用之间的环境,可以使用os.environ
来保存当前环境变量,并在每次调用Popen时将其传递给env
参数。
下面是一个示例代码:
import subprocess
import os
# 保存当前环境变量
saved_env = os.environ.copy()
# 设置新的环境变量
os.environ['MY_VAR'] = 'my_value'
# 第一次调用Popen
p1 = subprocess.Popen(['echo', '$MY_VAR'], stdout=subprocess.PIPE, env=os.environ)
output1, _ = p1.communicate()
print(output1.decode())
# 恢复到原来的环境变量
os.environ.clear()
os.environ.update(saved_env)
# 第二次调用Popen
p2 = subprocess.Popen(['echo', '$MY_VAR'], stdout=subprocess.PIPE, env=os.environ)
output2, _ = p2.communicate()
print(output2.decode())
在这个示例中,我们首先保存了当前的环境变量saved_env
,然后设置了一个新的环境变量MY_VAR
。然后我们使用Popen
调用了两次echo
命令,第一次传递了当前的环境变量os.environ
,第二次恢复到原来的环境变量saved_env
。输出结果应该分别是my_value
和$MY_VAR
。
通过这种方式,我们可以保持多次Popen
调用之间的环境变量一致。