是否有一种简单的方法可以将带有值的参数添加到python3
的{{3}}?
例如,使用简单参数实现命令很容易:
> 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
如果我必须手动解析参数是否有像optparse
那样的python3模块,它不希望参数有2个短划线前缀?
有什么建议吗?
答案 0 :(得分: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
请注意,我们的完成包含一个尾随=
作为用户的提示,让他们知道可以传递参数。