根據voithos's answer,os.environ
可以設置環境變量和子進程自動從父進程繼承。python在bash中: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總結
任何美元符號$
這裏的文檔將被默認擴大,無論是內部的單引號或沒有。
一種方式是逃避$
與反斜線\
像\$
還有另一種方式來避免這種擴張,即單引號先到這裏文檔分隔符,比較以下
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
稍有相關的問題:您的子進程(Python進程)能夠設置**持久**環境變量?我知道NodeJS不允許你設置程序結束後保持的環境變量。 – geostocker
將'os.system('echo $ a')'改爲'os.system('echo \ $ a')' –
它繼承了變量,但是'$ a'必須由於交互性的東西而被評估_before_。我正在使用windows,'echo%a%'yield'1'甚至從bash中運行。 –