如何将 pyinvoke 用作库并将任务包含在单个文件中?
How to use pyinvoke as a library and include the tasks in a single file?
我想创建一个独立的 python 脚本,它使用 invoke
并且还包括要执行的任务。一个最小的工作示例如下所示:
#!/usr/bin/env python3
from invoke import task, Program
@task()
def foo(c):
print("Task...")
program = Program()
program.run()
如果我将脚本命名为 example.py
,我希望能够使用脚本执行以下操作:
(py37) bash-3.00$ ./example.py foo
Task...
如果我将任务放在一个名为 tasks.py
的单独文件中,一切正常。该文档显示了如何将任务放在一个单独的包中,而不是顶级脚本本身。我怀疑可以通过向 Program()
提供正确的 namespace
参数来实现,但我还没有找到有效的值。
您完全正确,非常接近解决方案。 Program
医生说...
namespace:
A Collection to use as this program's subcommands.
If None (the default), the program will behave like invoke, seeking a
nearby task namespace with a Loader and exposing arguments
such as --list and --collection for inspecting or selecting specific
namespaces.
您需要初始化一个集合,添加任务并将其传递给 Program
。
#!/usr/bin/env python3
import sys
from invoke import task, Program, Collection
@task()
def foo(c):
print("Task...")
namespace = Collection()
namespace.add_task(foo)
program = Program(namespace=namespace)
program.run()
如您所愿将其另存为 example.py 和 运行。
$ python3 example.py foo
Task...
我想创建一个独立的 python 脚本,它使用 invoke
并且还包括要执行的任务。一个最小的工作示例如下所示:
#!/usr/bin/env python3
from invoke import task, Program
@task()
def foo(c):
print("Task...")
program = Program()
program.run()
如果我将脚本命名为 example.py
,我希望能够使用脚本执行以下操作:
(py37) bash-3.00$ ./example.py foo
Task...
如果我将任务放在一个名为 tasks.py
的单独文件中,一切正常。该文档显示了如何将任务放在一个单独的包中,而不是顶级脚本本身。我怀疑可以通过向 Program()
提供正确的 namespace
参数来实现,但我还没有找到有效的值。
您完全正确,非常接近解决方案。 Program
医生说...
namespace:
A Collection to use as this program's subcommands.
If None (the default), the program will behave like invoke, seeking a nearby task namespace with a Loader and exposing arguments such as --list and --collection for inspecting or selecting specific namespaces.
您需要初始化一个集合,添加任务并将其传递给 Program
。
#!/usr/bin/env python3
import sys
from invoke import task, Program, Collection
@task()
def foo(c):
print("Task...")
namespace = Collection()
namespace.add_task(foo)
program = Program(namespace=namespace)
program.run()
如您所愿将其另存为 example.py 和 运行。
$ python3 example.py foo
Task...