Python中Linux shell source命令的等效实现
我正在把一个shell脚本转换成Python,想找出最好的方法来完成以下任务。这个转换是因为我需要读取一些环境变量。
if [ -e "/etc/rc.platform" ];
then
. "/etc/rc.platform"
fi
我已经把'if'语句转换好了,但不太确定怎么处理这个 . "/etc/rc.platform",因为这是一个shell命令。所以到目前为止,我有以下内容:
if os.path.isfile("/etc/rc.platform"):
print "exists" <just to verify the if if working>
<what goes here to replace "source /etc/rc.platform"?>
我查过subprocess和execfile,但都没有成功。
这个Python脚本需要访问由rc.platform设置的环境变量。
5 个回答
1
(这里展示了crayzeewulf在评论中提到的解决方案。)
如果/etc/rc.platform
这个文件里只包含环境变量,你可以读取这些变量,并把它们设置为你Python程序的环境变量。
假设这个文件内容是:
$ cat /etc/rc.platform
FOO=bar
BAZ=123
读取并设置环境变量的代码:
>>> import os
>>> with open('/etc/rc.platform') as f:
... for line in f:
... k, v = line.split('=')
... os.environ[k] = v.strip()
...
>>> os.environ['FOO']
'bar'
>>> os.environ['BAZ']
'123'
3
一个有点不太正规的解决办法是解析一下env
的输出结果:
newenv = {}
for line in os.popen('. /etc/rc.platform >&/dev/null; env'):
try:
k,v = line.strip().split('=',1)
except:
continue # bad line format, skip it
newenv[k] = v
os.environ.update(newenv)
补充:修正了分割参数,感谢@l4mpi的帮助
0
为了得到结果,工作量太大了。我决定保留一个简单的脚本,用来获取我们需要的所有环境变量,干脆不把它们读入Python里了。