我如何使argparse显示一个具有两个名称的python脚本的帮助页面?

问题描述 投票:0回答:1

我当前正在使用的python脚本使用getopts,因为它是对使用Getopt :: Long的perl脚本的重写。我想迁移到argparse,但是失败了,因为选项与argparse的工作方式不太吻合。

然后我有了一个聪明的主意[?],如果我的脚本有2个名称,例如foo-ssh和foo-rsync,该怎么办

并且将foo-rsync链接到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代码示例,因为它就像河马一样用自己的便便标记了自己的领土(即:到处都是,这是重写的原因之一。

python argparse getopts
1个回答
0
投票

检查sys.argv[0]的值以查看脚本的名称,然后构造一个合适的ArgumentParser作为响应。

© www.soinside.com 2019 - 2024. All rights reserved.