在编写配置文件时,使用ConfigParser而不是常规python.py文件有什么好处?

msh*_*ren 10 python configuration module configuration-files

我一直在使用ConfigParser模块编写配置文件.然而,最近一个想法让我感到震惊; 为什么不使用纯Python呢?以此示例配置文件为例:

[parameters]
# Host
host = stackoverflow.com
port = 22
Run Code Online (Sandbox Code Playgroud)

要将这些值读入我的代码,我会这样做

import ConfigParser
config = ConfigParser.SafeConfigParser()
config.read('host.cfg')

host = config.get('parameters', 'host')
port = config.get('parameters', 'port')
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我有这样的配置文件:

# Host
host = 'stackoverflow.com'
port = 22
Run Code Online (Sandbox Code Playgroud)

在我的主要代码中,我可以这样做:

from host_cfg import *
Run Code Online (Sandbox Code Playgroud)

那么使用ConfigParser模块可以获得什么?每种方法的优缺点是什么?

S.L*_*ott 10

那么使用ConfigParser模块可以获得什么?

与Windows .ini文件的兼容性.让一些人开心.

每种方法的优缺点是什么?

ConfigParser的语法有限,而且一些相对简单的事情变得非常人为.看看logging例子.

Python语法更简单,更易于使用.没有安全漏洞,因为当他们可以简单地破解你的源代码时,没有人会浪费时间来破解配置文件.实际上,他们可以破解大部分内置的Python库.就此而言,他们可以自己烹饪Python解释器.

当应用程序源代码中的其他地方有更多,更容易的漏洞利用时,没有人会浪费时间来破解配置文件.


小智 6

ConfigParser解析简单,扁平的配置数据.导入python模块运行代码.对于配置文件,您需要数据,而不是代码.案件结案.

好的,更详细的:代码可以做各种各样的事情,包括更容易打破 - 特别是当非程序员编辑时(尝试解释.ini他们必须使用匹配的引号和逃避事物的modders) - 或导致命名空间冲突您的应用程序的其他部分(特别是如果您import *).另见最低权力规则.