Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用plac定义子命令的公共选项_Python_Command Line Arguments_Argparse - Fatal编程技术网

Python 使用plac定义子命令的公共选项

Python 使用plac定义子命令的公共选项,python,command-line-arguments,argparse,Python,Command Line Arguments,Argparse,我的问题本质上是一个后续问题。这显示了如何使用plac自动生成命令行界面,其中包含表示每个功能的子命令 是否可以告诉plac所有子命令通用的选项,并将其视为“全局”选项?事实上,这些选项在没有子命令的情况下应该有意义 例如,我可能有svn checkout和svn update子命令,但也需要svn-v或svn--version命令。我对plac很生疏,所以我首先从基本的argparse用法来解决这个问题 p = argparse.ArgumentParser(version='1.2.3')

我的问题本质上是一个后续问题。这显示了如何使用
plac
自动生成命令行界面,其中包含表示每个功能的子命令

是否可以告诉
plac
所有子命令通用的选项,并将其视为“全局”选项?事实上,这些选项在没有子命令的情况下应该有意义


例如,我可能有
svn checkout
svn update
子命令,但也需要
svn-v
svn--version
命令。

我对
plac
很生疏,所以我首先从基本的
argparse
用法来解决这个问题

p = argparse.ArgumentParser(version='1.2.3')
sp = p.add_subparser()
sp.add_parser('checkout')
sp.add_parser('update')
p.parse_args(['-v'])
返回
1.2.3
并退出。但是
-v
就像
-h
,是一个特殊的参数

p.parse_args([])
虽然给出了一个
参数太少的错误。i、 它需要一个子命令。如果“全局选项”类似于
-d
,则情况也是如此

有几个条件:

  • 新版本以不同的方式指定“version”参数

  • 3.3
    中,不再需要子命令。这是由于RequiredArguments错误消息中的更改造成的,在将来的更改中可能是/也可能不是这样


如果解析器是由
plac
生成的,我认为这些限制仍然适用,但我必须检查
plac
代码才能确定。

几年前,我使用
plac
设置了一个多处理脚本。它有多个具有重叠参数集的命令。我会尽量抽象我所做的事情

class Interface(object):
    commands = ['fn1','fn2',...]
    dict1 = dict(quiet=(...), dryrun=(...), ...)
    dict2 = dict()
    dict3 = dict()

    dict1.update(dict2)
    @plac.annotations(**dict1)
    def fn1(self, dryrun, quiet, ...)
        ...
    @plac.annotations(foo=(...), **dict2)
    def fn2(self, foo, ...)
        ...
    @plac.annotations(**dict2)
    def fn3(self, ...)
        ...
因此,虽然每个函数的参数都必须完整地拼写出来,但是注释可以通过混合和匹配各种字典来构建