Fabric-Python3-什么是上下文,它必须包含什么,为什么需要传递它?

Fabric-Python3-什么是上下文,它必须包含什么,为什么需要传递它?,python,python-3.x,fabric,Python,Python 3.x,Fabric,这是我的结构代码: from fabric import Connection, task server = Connection(host="usrename@server.com:22", connect_kwargs={"password": "mypassword"}) @task def dostuff(somethingmustbehere): server.run("uname -a") 这段代码运行得很好。当我执行fab dostuff时,它会执行我希望它执行的操作

这是我的结构代码:

from fabric import Connection, task

server = Connection(host="usrename@server.com:22", connect_kwargs={"password": "mypassword"})

@task
def dostuff(somethingmustbehere):
    server.run("uname -a")
这段代码运行得很好。当我执行
fab dostuff
时,它会执行我希望它执行的操作

当我删除
某些东西时,我会收到以下错误消息:

    raise TypeError("Tasks must have an initial Context argument!")
TypeError: Tasks must have an initial Context argument!
我从未在代码中的任何地方定义过
某些东西。我刚把它放进去,错误就消失了,一切正常。但是为什么呢?这个变量是什么?为什么我需要它?为什么它如此重要?如果它如此重要,为什么它只能是空的呢?我在这里真的迷路了。是的,它可以工作,但我不能运行我不理解的代码。它让我发疯。:-)

请注意,我说的是Python3(!)版本的Fabric!
结构版本是2.4.0

要能够运行
@task
,您需要一个上下文参数。Fabric使用invoke
task()
,它希望看到上下文对象。通常我们将变量命名为
c
ctx
(我总是用它来让它更清楚)。我不喜欢使用
c
,因为我通常使用它进行连接

从invoke package repo在github上检查这一点,您将看到,当上下文参数不存在时,它会引发异常,但它没有解释原因

要了解更多关于上下文对象、它是什么以及我们需要它的原因,您可以在pyinvoke站点上阅读以下内容:

旁白:这个“上下文”参数到底是什么?常见问题 运行人员面临的任务是传输“全局”数据-加载的值 通过CLI提供的配置文件或其他配置向量 在“设置”任务等中生成的标志

一些库(如Fabric 1.x)通过模块级实现此功能 属性使测试变得困难且容易出错,这限制了 并发性,并增加了实现的复杂性

调用将状态封装在显式上下文对象中,交给任务 当他们执行时。上下文是主要的API端点,提供 尊重当前状态的方法(例如Context.run)以及 进入该国本身

检查以下两个链接:


老实说,我浪费了很多时间弄清楚什么是上下文,为什么没有上下文我的代码就不能运行。但在某个时候,我放弃了,开始使用它让我的代码无误运行。

您使用的是哪个版本的Fabric?(Fabric本身的版本号,而不是Python版本)嘿,我使用的是2.4.0,我还将此添加到了原始帖子中,以便其他人也能更清楚地看到。“老实说,我浪费了很多时间弄清楚什么是上下文,为什么没有上下文我的代码就无法运行。但在某个时候,我放弃了,开始用它来让我的代码无误地运行。“哈哈,我的经验正是如此。谢谢你的回答!!对不起,我们需要做些什么才能让它正常工作?文档不是很有用。@Alper对不起,我没有明白你的问题!你的确切意思是什么?比如,上下文来自哪里?