如何从python中的配置文件中读取argparser值?

时间:2018-03-19 23:21:27

标签: python python-3.x python-2.7 argparse

我的脚本有很多参数。与argparser一起,我希望用户也可以选择通过配置文件指定这些参数。

parser.add_argument('-a','--config_file_name' ...required=False)
parser.add_argument('-b' ...required=True)
parser.add_argument('-c' ...required=False)
....

此时我只需要逻辑来实现以下内容:

  • 用户可以在命令行中输入所有参数或

  • 他们可以输入第一个参数,指定文件名,代码填写/覆盖配置文件中所有剩余的可选参数。

如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

我认为这不是由argparse来处理的。 简单的Argparse需要检查配置文件的参数是否存在并将其传递给您的程序。

您需要在程序中处理此问题,这意味着要执行以下操作:

...
arguments=parser.parse_args()
if len(arguments.config_file_name):
    f=fopen(arguments.config_file_name,'rb')
    conf_settings = f.read()
    for line in conf_settings:
        #parse your config format here.

这样,如果设置了config_file_name,您将覆盖任何可能的给定参数,如果没有,则将使用用户指定的参数执行该程序。

例如:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("a")
args = parser.parse_args()
if args.a:
    #We're getting config from config file here...
else:
    #We're getting config from the command line arguments
#Now we can call all functions with correct configuration applied.

答案 1 :(得分:0)

解决此问题的一种方法是使用xargs命令行实用程序。这不会完全给出您描述的命令行界面,但会达到同样的效果。

xargs将运行一个带有从标准输入读取的参数的命令。如果将参数从配置文件传递到xargs,那么将使用存储在文件中的参数调用python程序。例如:

的config.txt

-a -b --input "/some/file/path" --output "/another"

然后您可以将这些参数用于您的程序,如此

xargs ./my-prog.py --optional-arg < config.txt

由于argparse的工作方式,如果找到重复项,它将采用最后一个参数的值。因此,如果您有重复的参数,将选择配置文件中的参数。