根据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文档中的任何美元符号$
都会被展开,无论它是否在单引号内。
一种方法是使用反斜杠$
转义\
,例如\$
还有另一种方法可以避免这种扩展,即单引号引用第一个doc分隔符,比较以下
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
答案 0 :(得分:1)
@ChristosPapoulas说的是对的。当你输入时,shell会对$a
进行评估。$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 ')
$