gpt4 book ai didi

bash : os.环境行为中的python

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:18 25 4
gpt4 key购买 nike

根据 voithos's answer , os.environ 可以设置环境变量,子进程自动继承父进程。

但是,比较下面的情况

第一种情况,python交互方式

>>>import os
>>>os.environ['a']='1'
>>>os.system('echo $a')
1
0

结果很好。

第二种情况,在 bash 脚本中

#!/bin/bash
python3 - <<EOF
import os
os.environ['a']='1'
os.system('echo $a')
EOF

将上面的内容保存为 test.bash 并运行 bash test.bash 我们一无所获!

为什么在第二种情况下,os.system不继承变量?


总结

bash here 文档中的任何美元符号 $ 都会默认展开,无论它是否在单引号内。

一种方法是使用反斜杠 \ 转义 $ ,例如 \$

还有一种方法可以避免这种扩展,即单引号这里的第一个文档分隔符,比较下面

a=0

python3 - <<here
import os
os.environ['a']='1'
os.system('echo $a')
here

python3 - <<'here'
import os
os.environ['a']='1'
os.system('echo $a')
here

最佳答案

@ChristosPapoulas 说的是对的。当您输入 $a 时,shell 会对其进行评估。$a 永远不会进入您的 python 解释器。这可以从以下方面看出:

$ cat >/tmp/foo <<EOF
> import os
> os.environ['a'] = '1'
> os.system('echo $a')
> EOF
$ cat /tmp/foo
import os
os.environ['a'] = '1'
os.system('echo ')
$

关于bash : os.环境行为中的python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43583318/

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