在 shell 脚本中,可能会做这样的事情:
myvar='default_value'
source myfile.sh
echo $myvar
myfile.sh 是这样的:
echo "myvar='special_value'" > myfile.sh
我知道在 python 中执行此操作的几种“安全”方法,但我能想到的在 Python 中获得类似行为的唯一方法(尽管丑陋且不安全)如下:
myvar = 'default_value'
myimport = 'from %s import *' % 'myfile'
exec(myimport)
print(myvar)
myfile.py 在 ./中,看起来像:
myvar = 'special_value'
我想我会很高兴做这样的事情:
m.myvar = 'default_value'
m.update(__import__(myimport))
并更新 m 中的对象。如果不编写一些东西来遍历对象,我想不出一种简单的方法来做到这一点。
最佳答案
有两种方式来看待这个问题。
How can I read key-value pairs in python? Is there a standard way to do this?
和
How can I give full expressive power to a configuration script?
如果你的问题是第一个;那么最明显的答案是使用 ConfigParser
模块:
from ConfigParser import RawConfigParser
parser = RawConfigParser({"myvar": "default_value"}) # Never use ConfigParser.ConfigParser!
parser.read("my_config")
myvar = parser.get("mysection", "myvar")
它会从一个看起来像普通 INI 样式配置的文件中读取一个值:
# You can use comments
[mysection]
myvar = special_value
对于第二个选项,当你真的想为配置赋予 python 的全部功能时(这种情况很少见,但有时是必要的),你可能不想使用 import
,而是你应该使用 execfile
:
config = {}
execfile("my_config", config)
myvar = config.get("myvar", "default_value")
依次从 python 脚本中读取;它将读取全局变量 myvar
,无论脚本如何派生它:
import random
myvar = random.choice("special_value", "another_value")
关于python:从文件输入python数据的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557607/