shell在二级python_在python下运行时在shell脚本之间传递shell变量[duplicate]
使用
shell=True
首先,就
--如果你在使用
外殼=真
,您可以告訴開始運行未經修改的現有腳本內容的shell。
也就是說——如果你最初這么做的話:
subprocess.Popen(['your-command', 'arg1', 'arg2'])
file1.sh
是可信的,是指帶外問題,如shellshock):
# this has the security of passing explicit out-of-band args
# but sources your script before the out-of-process command
subprocess.Popen(['. "$1"; shift; exec "$@"', "_", "./file1.sh",
"your-command", "arg1", "arg2"], shell=True)
使用
/proc/self/environ
在以NUL分隔的流中導出環境變量
理想的做法是以一種明確的形式導出環境變量——以NUL分隔的流是理想的——然后用Python解析該流(以非常明確的格式)。
# copy all our environment variables, in a NUL-delimited stream, to myvars.environ
cat myvars.environ
…或者您可以手動導出一組特定的變量:
for varname in HORCMINST PATH; do
printf '%s=%s\0' "$varname" "${!varname}"
done >myvars.environ
在Python中讀取和解析NUL分隔的流
#!/usr/bin/env python
env = {}
for var_def in open('myvars.environ', 'r').read().split('\0'):
(key, value) = var_def.split('=', 1)
env[key] = value
import subprocess
subprocess.Popen(['your-command', 'arg1', 'arg2'], env=env)
您還可以通過運行
os.environ[key]=value
.
讀取和解析bash中以NUL分隔的流
順便說一下,同樣的格式在bash中也很容易解析:
while IFS= read -r -d '' var_def; do
key=${var_def%%=*}
value=${var_def#*=}
printf -v "$key" '%s' "$value"
export "$key"
done
# ...put the rest of your bash script here
現在,
以NUL分隔的流?因為環境變量是C字符串——與Python字符串不同,它們不能包含NUL。因此,NUL是唯一一個可以安全地用于分隔它們的字符。
包含
一個字面上的換行符——如果有人在環境變量中嵌入一個簡短的Python腳本,那么這是一個非常合理的事件!
總結
以上是生活随笔為你收集整理的shell在二级python_在python下运行时在shell脚本之间传递shell变量[duplicate]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis mysql 解决超卖_Red
- 下一篇: swiper切换按钮位置改变_swipe