我当前工作的python脚本使用getopts,因为它是对使用Getopt::Long的perl脚本的重写。我想迁移到argparse,但是失败了,因为这些选项不能很好地适应argparse的工作方式。
然后我有了一个聪明的主意?],如果脚本有两个名称,例如:foo ssh&foo rsync
和symlink foo rsync to foo ssh(超过90%的脚本是foo ssh,rsync选项是一个不适合作为选项的附加组件),然后让脚本中的代码只处理它所运行的特定名称的选项。
我知道有次犯罪,但这看起来不像我要找的,而且得到的帮助输出比我刚开始的还要丑陋和混乱。
如果我尝试尽可能靠近argparse的getopts方式,我会得到:
usage: foo-ssh [-h] [--version] [--debug] [--forward-agent HOST:PORT]
[--ipv4] [--knock HOST:PORT]
[--libvirt-vnc HOST:PORT | --rsync]
[USER@]HOST
从perl脚本帮助页:
Usage: foo-ssh <options> [USER@]HOST
foo-ssh <options> --knock HOST:PORT [USER@]HOST
foo-ssh <options> --libvirt-vnc HOST:PORT [USER@]HOST
foo-ssh <options> --rsync -- <rsync options> [USER@]HOST:/path/file.name /tmp
我想要什么:
usage: foo-ssh [-h] [--version] [--debug] [--forward-agent HOST:PORT]
[--ipv4] [--knock HOST:PORT]
[--libvirt-vnc HOST:PORT]
[USER@]HOST
foo-rsync [OPTION...] [USER@]HOST:SRC... [DEST]
foo-rsync [OPTION...] SRC... [USER@]HOST:DEST
首先,我是不是在打一匹死马?如果我用相同数量或更多的代码替换已经工作的代码,那么整个练习就毫无意义。
第二,这可能吗?我在寻找什么来实现它?
脚注:Perl代码示例没有包括在内,因为它写得像河马,用自己的粪便标记自己的领地(即:到处都是),这是重写的原因之一。