我在向Fabric传递参数时遇到了一些问题。我想提供一个主机名,然后在指定的主机上设置。这是我尝试过的基本结构,但Fabric似乎将此解释为将“hostname%s”写入主机而不是传入的实际值。
@task
def configure_host(hostname):
sudo("hostname %s") % hostname
我会注意到这个内容位于fabfile目录中名为set_host的文件中。因此,我可以运行“fab -H user@1.2.3.4 set_host.configure_host”来运行此代码(当我对主机名进行硬编码时,它可以正常工作)。但是,我试图将它作为“fab -H user@1.2.3.4 set_host.configure_host:host = FunHostname”运行(注意我的后缀),它失败了。
第一个问题是它似乎是在编写“hostname%s”而不是实际的主机名,但也不太喜欢我的一些sudo命令而且有些返回“致命错误:sudo()收到的非零返回码1执行时!“我可以尝试找到后者的解决方法,但我想知道我的用户传递参数的基本策略是否合乎逻辑。我认为这很简单,我在这里遵循“任务参数”下的大纲:http://docs.fabfile.org/en/latest/tutorial.html
答案 0 :(得分:1)
您应该在括号内包含字符串格式:
sudo("hostname %s" % hostname)
这样,Fabric将使用hostname变量的值正确替换%s
。