我想混合一个config.py方法和ConfigParser来设置config.py中的一些默认值,这些默认值可以被用户在其根文件夹中覆盖:
import ConfigParser
import os
CACHE_FOLDER = 'cache'
CSV_FOLDER = 'csv'
def main():
cp = ConfigParser.ConfigParser()
cp.readfp(open('defaults.cfg'))
cp.read(os.path.expanduser('~/.python-tools.cfg'))
CACHE_FOLDER = cp.get('folders', 'cache_folder')
CSV_FOLDER = cp.get('folders', 'csv_folder')
if __name__ == '__main__':
main()
运行此模块时,我可以看到CACHE_FOLDER的值被更改。但是,当在另一个模块中时,我会执行以下操作:
import config
def main()
print config.CACHE_FOLDER
这将打印变量的原始值('cache')。
我做错了吗?
答案 0 :(得分:1)
您显示的代码中的main
函数仅在该模块作为脚本运行时运行(由于if __name__ == '__main__'
块)。如果你希望在模块加载的任何时候转弯运行,你应该摆脱这个限制。如果有额外的代码实际上在main
函数中执行了一些有用的操作,除了设置配置之外,您可能希望将该部分从设置代码中分离出来:
def setup():
# the configuration stuff from main in the question
def main():
# other stuff to be done when run as a script
setup() # called unconditionally, so it will run if you import this module
if __name__ == "__main__":
main() # this is called only when the module is run as a script