如何优雅解决 click 模块 @option 的选项太多?

2017-03-11 19:16:58 +08:00
 saodutbc

在为学校图书馆写一个基于命令行的监控脚本,准备用 click 来实现交互。但是现在遇到一个问题,就是 @option 的个数太多,就像下面这样:

import click

@click.command()
@click.option('-a')
@click.option('-b')
@click.option('-c')
@click.option('-d')
...
@click.option('-z')
def myscript(a, b, c, ..., z):
    if a:
        ...

    if b:
        ...

    ...
    
    if z:
        ...

由于 @option 太多,必须要在myscript下面用大量的 if 语句一一检查用户是否给出了某个选项,这样的话代码结构太丑了,请问对这样的情况有什么好的解决方法?

2373 次点击
所在节点    Python
3 条回复
bonfy
2017-03-11 23:04:00 +08:00
最近有个 python-fire 很火 可以看看

至少不用写这么多 if
PythonAnswer
2017-03-13 08:53:07 +08:00
pocoo 喜欢滥用 @,实在是丑啊。
siteshen
2017-03-13 12:43:43 +08:00
没用过 click ,不过 decorator 太多是可以抛弃语法糖,直接用循环解决:
def myscript(self, ...):
pass

for option in reversed(['-a', '-b', ..., '-z']):
myscript = click.option(option)(myscript)

myscript = click.command()(myscript)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/346715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX