有没有一种简单的方法可以将带有值的参数添加到python3中命令,命令?

2024-10-02 14:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种简单的方法可以将带有值的参数添加到python3^{}

例如,使用简单的参数很容易实现命令:

> action1 param1 param2

通过添加do_action1()complete_action1(),我可以搜索现有参数的列表。你知道吗

但是如何用值实现参数,例如:

> action1 param1=234 param2=SomeTextValue

或者

> action1 param1 234 param2 SomeTextValue

其中param1将被设置为234,而param2将被设置为SomeTextValue。你知道吗

这能被cmd.Cmd解析吗?你知道吗

我只能考虑在do_action1( self, params = None )中获取整个参数列表,然后自己解析它。你知道吗

如果我使用optparse,参数的前缀必须是破折号,比如-p--param1--param2,所以要在cmd.Cmd中完成,我必须先键入2个破折号。。。你知道吗

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

如果必须手动解析参数,是否有任何python3模块(如optparse)不希望参数有2个破折号前缀?你知道吗

有什么建议吗?你知道吗


Tags: 方法命令cmd列表参数dopython3param1
1条回答
网友
1楼 · 发布于 2024-10-02 14:19:23

好吧,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

注意,我们的补全包含一个尾随的=,作为对用户的提示,让他们知道可以传递一个参数。你知道吗

相关问题 更多 >