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

how to read argparser values from a config file in python?

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

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

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

如何实现?

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

你需要在你的程序中处理这个,这意味着做类似的事情:

...
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.

解决此问题的一种方法是使用 xargs 命令行实用程序。这不会为您提供您所描述的命令行界面,但会达到相同的效果。

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

config.txt

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

然后您可以像这样在您的程序中使用这些参数

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

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