如何从 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)
....
此时我只需要实现以下逻辑:
用户可以在命令行中输入所有参数或
他们可以输入第一个参数,指定文件名,然后代码填充 in/overwrites 配置文件中所有剩余的可选参数。
如何实现?
我不认为这取决于 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 的工作方式,如果发现重复项,它将采用最后一个参数的值。因此,如果您有重复的参数,将选择配置文件中的参数。
我的剧本有很多论点。与 argparser 一起,我希望用户还可以选择通过配置文件指定这些参数。
parser.add_argument('-a','--config_file_name' ...required=False)
parser.add_argument('-b' ...required=True)
parser.add_argument('-c' ...required=False)
....
此时我只需要实现以下逻辑:
用户可以在命令行中输入所有参数或
他们可以输入第一个参数,指定文件名,然后代码填充 in/overwrites 配置文件中所有剩余的可选参数。
如何实现?
我不认为这取决于 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 的工作方式,如果发现重复项,它将采用最后一个参数的值。因此,如果您有重复的参数,将选择配置文件中的参数。