-2

python3に値を持つ引数を追加する簡単な方法はありcmd.Cmdますか?

たとえば、単純なパラメータを使用してコマンドを実装するのは簡単です。

> action1 param1 param2

とを追加することdo_action1()complete_action1()、完了するために既存のパラメータのリストを検索できます。

しかし、たとえば次のように、値を使用してパラメーターをどのように実装しますか。

> action1 param1=234 param2=SomeTextValue

また

> action1 param1 234 param2 SomeTextValue

とにparam1設定さ234れます。param2SomeTextValue

これはで解析できますcmd.Cmdか?

do_action1( self, params = None )引数リスト全体を取り込んで、それを自分で解析することしか考えられません。

パラメータを使用optparseする場合は、またはとのようなダッシュをプレフィックスとして付ける必要がある-pため--param1--param2で完了するには、cmd.Cmd最初に2つのダッシュを入力する必要があります...

> action1 --param1=234 --param2=SomeTextValue

パラメータを手動で解析する必要がある場合optparse、パラメータに2つのダッシュプレフィックスが付いていることを期待しないようなpython3モジュールはありますか?

助言がありますか?

4

1 に答える 1

1

まあ、cmd.Cmdとにかく、実際にはあなたのためにたくさんの構文解析をしません。したがって、はい、末尾=にパラメータを入力し、コマンドを自分で解析するだけで、引数を使用してパラメータを処理できます。

import cmd

def parse(arg):
    return tuple(k.partition('=') for k in arg.split())

class MyShell(cmd.Cmd):
    def do_foo(self, arg):
        for x, _, y in parse(arg):
            print(x, y)

    def complete_foo(self, text, line, begidx, endidx):
        # Cmd treats = as the end of params; we don't want that.
        if line.endswith('='):
            return ()

        opts = ['param1=', 'param2', 'param3=']
        return [opt for opt in opts if opt.startswith(text)]

MyShell().cmdloop()

使用例:

(Cmd) foo param<TAB>
param1=  param2   param3=  
(Cmd) foo param1=a param
param1=  param2   param3=  
(Cmd) foo param1=a param2 param3=ah
param1 a
param2 
param3 ah

補完には=、パラメーターを渡すことができることをユーザーに知らせるためのヒントとして末尾が含まれていることに注意してください。

于 2012-08-28T00:30:19.287 に答える