将环境变量从bash脚本分配给Python的当前会话
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将环境变量从bash脚本分配给Python的当前会话,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2225字,纯文字阅读大概需要4分钟。
内容图文
![将环境变量从bash脚本分配给Python的当前会话](/upload/InfoBanner/zyjiaocheng/703/a773713b6b4e44d09d0c663241636936.jpg)
我有许多bash脚本来帮助设置我当前的会话环境变量.我需要设置env变量,所以我可以使用子进程模块在我的python脚本中运行命令.这是我执行bash脚本的方式:
. ./file1.sh
下面是bash脚本的开头:
echo "Setting Environment Variable..."
export HORCMINST=99
echo $HORCMINST
...
有没有办法从python脚本调用这些bash脚本或在python脚本中做类似的事情?
解决方法:
在现有脚本中使用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
…或者您可以手动导出一组特定的变量:
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 <myvars.environ
# ...put the rest of your bash script here
现在,为什么NUL划分的流?因为环境变量是C字符串 – 与Python字符串不同,它们不能包含NUL.因此,NUL是唯一可以安全地用于分隔它们的角色.
例如,试图使用换行符的人可能会受到包含文字换行符的环境变量的阻碍 – 如果有人在环境变量中嵌入一个简短的Python脚本,那么这是一个非常合理的事件!
内容总结
以上是互联网集市为您收集整理的将环境变量从bash脚本分配给Python的当前会话全部内容,希望文章能够帮你解决将环境变量从bash脚本分配给Python的当前会话所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。