我想在pyinvoke的任务中使用可变数量的参数。
像这样:

from invoke import task

@task(help={'out_file:': 'Name of the output file.',
            'in_files': 'List of the input files.'})
def pdf_combine(out_file, *in_files):
    print( "out = %s" % out_file)
    print( "in = %s" % list(in_files))

上面只是我尝试过的许多变体之一,但是pyinvoke似乎无法处理数量可变的参数。这是真的?

上面的代码导致
$ invoke pdf_combine -o binder.pdf -i test.pdf test1.pdf
No idea what '-i' is!

类似,如果我定义pdf_combine(out_file,in_file),在in_file之前没有星号
$ invoke pdf_combine -o binder.pdf -i test.pdf test1.pdf
No idea what 'test1.pdf' is!

如果仅使用一个in_file调用任务,如下所示,则运行OK。
$ invoke pdf_combine -o binder.pdf -i test.pdf
out = binder.pdf
in = ['t', 'e', 's', 't', '.', 'p', 'd', 'f']

我想看的是
$ invoke pdf_combine -o binder.pdf test.pdf test1.pdf test2.pdf
out = binder.pdf
in = [test.pdf test1.pdf test2.pdf]

我无法在pyinvoke的文档中找到类似的内容,尽管我无法想象该库的其他用户不需要调用带有可变数量参数的任务...

最佳答案

您可以执行以下操作:

from invoke import task

@task
def pdf_combine(out_file, in_files):
    print( "out = %s" % out_file)
    print( "in = %s" % in_files)
    in_file_list = in_files.split(',')   # insert as many args as you want separated by comma

>> out = binder.pdf
>> in = test.pdf,test1.pdf,test2.pdf
invoke命令在哪里:
invoke pdf_combine -o binder.pdf -i test.pdf,test1.pdf,test2.pdf

通过阅读 pyinvoke 文档,我找不到另一种方法。

关于python - 如何在pyinvoke中使用可变数量的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35771876/

10-12 22:00