Python单击-从配置文件中提供参数和选项
鉴于以下计划:Python单击-从配置文件中提供参数和选项,python,command-line-interface,python-click,Python,Command Line Interface,Python Click,鉴于以下计划: #!/usr/bin/env python import click @click.command() @click.argument("arg") @click.option("--opt") @click.option("--config_file", type=click.Path()) def main(arg, opt, config_file): print("arg: {}".format(arg)) print("opt: {}".format(
#!/usr/bin/env python
import click
@click.command()
@click.argument("arg")
@click.option("--opt")
@click.option("--config_file", type=click.Path())
def main(arg, opt, config_file):
print("arg: {}".format(arg))
print("opt: {}".format(opt))
print("config_file: {}".format(config_file))
return
if __name__ == "__main__":
main()
我可以使用命令行提供的参数和选项运行它
$ ./click_test.py my_arg --config_file my_config_file
arg: my_arg
opt: None
config_file: my_config_file
如何将配置文件(在ini
?yaml
?py
?json
?)提供给--config_文件
),并接受内容作为参数和选项的值
例如,我希望我的配置文件包含
opt: my_opt
并使程序的输出显示:
$ ./click_test.py my_arg --config_file my_config_file
arg: my_arg
opt: my_opt
config_file: my_config_file
我找到了回调
函数,该函数看起来很有用,但我找不到一种方法来修改同一函数的同级参数/选项。这可以通过使用click.Command.invoke()
方法来完成,如:
自定义类:
使用自定义类:
然后,要使用自定义类,请将其作为cls参数传递给命令装饰器,如:
@click.command(cls=CommandWithConfigFile('config_file'))
@click.argument("arg")
@click.option("--opt")
@click.option("--config_file", type=click.Path())
def main(arg, opt, config_file):
测试代码:
测试结果:
您是否尝试过:?我希望这可以在没有外部软件包的情况下实现。关于这与单击配置或单击配置文件的比较,您有何看法?@eric.frederich,这只是一个快速练习,演示如何构建您自己的东西,因此没有意见支持/反对库。
@click.command(cls=CommandWithConfigFile('config_file'))
@click.argument("arg")
@click.option("--opt")
@click.option("--config_file", type=click.Path())
def main(arg, opt, config_file):
# !/usr/bin/env python
import click
import yaml
@click.command(cls=CommandWithConfigFile('config_file'))
@click.argument("arg")
@click.option("--opt")
@click.option("--config_file", type=click.Path())
def main(arg, opt, config_file):
print("arg: {}".format(arg))
print("opt: {}".format(opt))
print("config_file: {}".format(config_file))
main('my_arg --config_file config_file'.split())
arg: my_arg
opt: my_opt
config_file: config_file