关于python:如何在pyinvoke中使用数量可变的参数

How to use a variable number of arguments in pyinvoke

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

1
2
3
4
5
6
7
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似乎无法处理变量个数的参数。这是真的吗?

以上代码导致

1
2
$ invoke pdf_combine -o binder.pdf -i test.pdf test1.pdf
No idea what '-i' is!

类似的,如果我定义pdf_combine(out_file,in_file),在_file之前不带星号

1
2
$ invoke pdf_combine -o binder.pdf -i test.pdf test1.pdf
No idea what 'test1.pdf' is!

如果我像下面这样在文件中只调用一个任务,那么运行OK。

1
2
3
$ invoke pdf_combine -o binder.pdf -i test.pdf
out = binder.pdf
in = ['t', 'e', 's', 't', '.', 'p', 'd', 'f']

我想看的是

1
2
3
$ invoke pdf_combine -o binder.pdf test.pdf test1.pdf test2.pdf
out = binder.pdf
in = [test.pdf test1.pdf test2.pdf]

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


你可以这样做:

1
2
3
4
5
6
7
8
9
10
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命令为:

1
invoke pdf_combine -o binder.pdf -i test.pdf,test1.pdf,test2.pdf

我找不到其他方法来阅读pyinvoke文档。