簡體   English   中英

使用plac定義子命令的常用選項

[英]Defining common options for sub-commands with plac

我的問題基本上是對這個問題的后續行動。 這顯示了如何使用plac自動生成一個命令行界面,其中子命令代表每個函數。

是否有可能告訴plac所有子命令共有的選項,並且可以被視為“全局”選項? 實際上,這些選項在沒有子命令的情況下應該具有意義。

舉個例子,我可能有svn checkoutsvn update子命令,但也喜歡svn -vsvn --version命令。

幾年前,我使用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, ...)
        ...

因此,雖然每個函數的參數必須完整拼寫,但注釋可以通過混合和匹配各種字典來構建。

我在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([])雖然給出了too few arguments錯誤。 即它需要一個子命令。 如果“全局選項”類似於-d

幾個資格:

  • 新版本以不同的方式指定“版本”參數。

  • 3.3 ,不再需要子命令。 這是由於必需參數錯誤消息的更改,並且可能/或可能不適用於將來的更改。

我認為如果解析器是由plac生成的,這些限制仍然適用,但我必須檢查plac代碼以確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM