我有许多bash脚本来帮助设置我当前的会话环境variables。 我需要envvariables设置,所以我可以使用subprocess模块在我的python脚本中运行命令。 这是我如何执行bash脚本:
. ./file1.sh
以下是bash脚本的开始:
echo "Setting Environment Variable..." export HORCMINST=99 echo $HORCMINST ...
有没有办法从python脚本调用这些bash脚本,或者在python脚本中做类似的事情?
Bash hashmap使用报价作为关键
使用sed用带斜线的已定义variables的空格replace文本
如何比较两个目录的大小?
bash:迭代通过索引select的JSON数组的成员
从bash shell启动一个新的bash shell
如何检查互联网访问在Linux中使用bash脚本?
在现有脚本中使用shell=True
首先,就最简单的事情而言 – 如果您使用的是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中解析这个流(这是一个非常明确的格式)。
假设Linux,你可以导出一组完整的环境变量,如下所示:
# copy all our environment variables,in a NUL-delimited stream,to myvars.environ cat </proc/self/environ >myvars.environ
…或者您可以手动导出一组特定的变量: