将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
设置的环境变量答案 0 :(得分:3)
一个有点hackish的解决方案是解析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
答案 1 :(得分:1)
(以下是他的评论中描述的crayzeewulf解决方案的演示。)
如果/etc/rc.platform
仅包含环境变量,您可以阅读它们并将它们设置为Python进程的env vars。
鉴于此文件:
$ 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'
答案 2 :(得分:1)
返回工作太多了。要保留一个小的shell脚本来获取我们需要的所有env变量,并忘记将它们读入python。
答案 3 :(得分:0)
试试这个:
if os.path.exists ("/etc/rc.platform"):
os.system("/etc/rc.platform")
答案 4 :(得分:0)
由于source
是内置的shell,因此您需要在调用shell=True
时设置subprocess.call
>>> import os
>>> import subprocess
>>> if os.path.isfile("/etc/rc.platform"):
... subprocess.call("source /etc/rc.platform", shell=True)
我不确定你在这里尝试做什么,但我仍然想提一下:/etc/rc.platform
可能导出一些shell函数供rc.d
中的其他脚本使用。由于这些是shell函数,它们只会被导出到由subprocess.call()
调用的shell实例,如果你调用另一个subprocess.call()
,这些函数将无法使用,因为你要生成一个全新的shell来调用新剧本。