我正在做一些科学模拟的工作,用Python编写。我继承了密码。sim有几个参数(~15-20),这些参数可以随运行而变化--大多数是数值变量,外加一些布尔标志。主要Python脚本将这些参数作为命令行args,并使用argparse将它们存储在argparse.Namespace对象中。
实际上,参数值不是在命令行上输入,而是存储在shell脚本中,以便于重用。除了使用相关的命令行args运行Python脚本之外,这些脚本没有真正的用途。
我想将参数集存储在人类可读的(特别是科学家可读的)和parsable配置文件中,并且完全不用shell脚本和argparse。这样做的结果是,我将把参数存储在字典中,而不是Namespace中。
在字典中存储设置有什么坏处吗?除了params.spam比params['spam']略简洁之外
发布于 2015-01-10 01:11:28
dict是argparse最终用于托管其Namespace的工具,因此,直接使用Namespace没有问题。
模块ConfigParser,https://docs.python.org/2/library/configparser.html,将解析一个相当正常的配置文件,并将设置存储在其中。然而,它是按章节排列的。若要提取单个区段'foo',给定填充的配置解析器对象cp,
adict = dict(cp.items('foo'))会起作用的。
为了更容易地访问语法,您可以使用http://code.activestate.com/recipes/52308-the-simple-but-handy-collector-of-a-bunch-of-named/ (一个老的但是goldie:-).
发布于 2015-01-10 01:45:33
Ipython集成了配置文件和命令行值。有默认配置文件和用户配置文件。argparse参数是从配置文件中创建的。因此,在多个级别上设置和修改值。我必须深入研究代码才能确定,但我认为值最终存储在config生成的结构中,而不是argparse.Namespace。
在内部,argparse使用getattr和setattr访问名称空间。允许设置属性名称的最大自由。Namespace类就像它们来的一样简单,有一些比较和显示的方法。
命名空间值可以通过以下简单语句添加到字典中:
d.update(vars(p.parse_args()))我会考虑使用argparse.SUPPRESS将默认值保留在名称空间之外,从而防止它们更改字典中已经存在的值。
https://stackoverflow.com/questions/27871769
复制相似问题