以编程方式生成单击Python选项



使用点击是一种以编程方式提示用户输入的方法。

对于一些用例,我已经能够创建一个自定义类,使某些选项成为必需的,并提示用户输入(或者更准确地说,使现有选项不再是必需的,删除提示(,这是受这篇文章的启发。

对于需要未知数量的相同类型输入的用例,我可以对大量选项进行编码,然后删除那些不需要的选项。但是,一个更优雅的解决方案是通过编程从单个参数或选项的自定义类生成选项。如有任何建议,我们将不胜感激。

这就是我为复制所需行为而想出的。

在这个用例中,用户已经下载了一个包含一些未签名消息(n_messages(的文件。然后,用户通过一个单独的过程对消息进行签名。然后,使用@click.command signed将已签名的消息与包含未签名消息的文件一起上载。

这是@click.command:

@main.command()
@ click.argument('file', type=click.File('r'), required=True)
@click.option('-sig', 'signatures', type=click.File('r'), multiple=True, required=True, cls=VerifySigNumbers)
def signed(*args, **kwargs):
create_signed_tx(*args, **kwargs)

这是自定义类:

class VerifySigNumbers(click.Option):
def __init__(self, *args, **kwargs):
super(VerifySigNumbers, self).__init__(*args, **kwargs)
def handle_parse_result(self, ctx, opts, args):
pig_file = opts.get('file')
data = read_pig_file(file)
n_messages = data.get('n_messages')
signatures = opts.get('signatures')
n_sigs = 0 if signatures is None else len(signatures)
if n_sigs != n_messages:
raise click.UsageError(
f'{pig_file} requires {n_tx_inputs} signatures, {n_sigs} provided', ctx)
return super(VerifySigNumbers, self).handle_parse_result(ctx, opts, args)

我希望用户对未签名的消息进行提示,但不确定如何实现。此外,我在通过提示上传文件时遇到了问题。

最新更新