gpt4 book ai didi

python - 如何在Python中控制进程环境变量?

转载 作者:太空狗 更新时间:2023-10-30 02:21:15 26 4
gpt4 key购买 nike

我正在尝试更改 Python 执行过程的环境。似乎正确的方法应该是与 os.environ 交互。但是,我的以下断言失败了:

import os, subprocess
os.environ['ATESTVARIABLE'] = 'value'
value = subprocess.check_output(['echo', '$ATESTVARIABLE'], shell=True)
assert 'value' in value

还有什么我应该做的来改变当前的环境吗?上面的代码揭示了我对 Python 的理解有什么缺陷:)?

(请注意,在当前的 Python 解释器中,os.environ['ATESTVARIABLE'] 包含预期值。我正在设置运行一些需要特定环境变量的代码,并且可能启动外部进程。显然,如果我想控制特定子进程的环境,我会使用 env 关键字。)

最佳答案

查看 subprocess 模块的源代码,这是因为使用带有 shell=True 的参数列表将等效于...

/bin/sh -c 'echo' '$ATESTVARIABLE'

...当您想要的是...

/bin/sh -c 'echo $ATESTVARIABLE'

以下对我有用...

import os, subprocess

os.environ['ATESTVARIABLE'] = 'value'
value = subprocess.check_output('echo $ATESTVARIABLE', shell=True)
assert 'value' in value

更新

FWIW,两者的区别在于第一种形式......

/bin/sh -c 'echo' '$ATESTVARIABLE'

...将只调用 shell 的内置 echo,不带参数,并将 $0 设置为文字字符串 '$ATESTVARIABLE' 例如……

$ /bin/sh -c 'echo $0'
/bin/sh
$ /bin/sh -c 'echo $0' '$ATESTVARIABLE'
$ATESTVARIABLE

...而第二种形式...

/bin/sh -c 'echo $ATESTVARIABLE'

...将使用等于环境变量 ATESTVARIABLE 值的单个参数调用 shell 的内置 echo

关于python - 如何在Python中控制进程环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com