我当前使用的python脚本使用getopts,因为它是对使用Getopt::Long的perl脚本的重写。我想迁移到argparse,但是失败了,因为这些选项不能很好地适应argparse的工作方式
然后我有了一个好主意[?],如果我的脚本有两个名字,例如:foo ssh&;foo rsync公司
并且symlink foo rsync to foo ssh(超过90%的脚本是foo ssh,rsync选项是一个附加组件,不能很好地作为一个选项),然后让脚本中的代码只处理它所运行的特定名称的选项
我知道有关subparser,但这看起来并不完全像我所寻找的,并产生了一个更丑陋和混乱的帮助输出比我开始
如果我尝试用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代码示例没有包括在内,因为它像河马一样用自己的粪便标记自己的领地(即:到处都是),这是重写的原因之一
检查
sys.argv[0]
的值以查看在哪个名称下调用脚本,然后构造适当的ArgumentParser
作为响应(如果
epilog
将落在“折叠之下”,则将对另一个脚本的引用放在description
中。)相关问题 更多 >
编程相关推荐