我的脚本有很多参数。与argparser一起,我希望用户也可以选择通过配置文件指定这些参数。
parser.add_argument('-a','--config_file_name' ...required=False)
parser.add_argument('-b' ...required=True)
parser.add_argument('-c' ...required=False)
....
此时我只需要逻辑来实现以下内容:
用户可以在命令行中输入所有参数或
他们可以输入第一个参数,指定文件名,代码填写/覆盖配置文件中所有剩余的可选参数。
如何实现这一目标?
答案 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的工作方式,如果找到重复项,它将采用最后一个参数的值。因此,如果您有重复的参数,将选择配置文件中的参数。