gpt4 book ai didi

python - fabric: run() 挂起,没有任何错误

转载 作者:行者123 更新时间:2023-11-28 16:37:52 25 4
gpt4 key购买 nike

from fabric.api import env
from fabric.api import run

class FabricSupport:
def __init__ (self):
pass

def run(self, host, command):
env.key_filename = 'C:/.ssh/dev.pub'
env.host_string = "%s:%s" % (host, 22)
run(command, timeout=5)

fab = FabricSupport()

def execute(host, txt):
stdout = ""
try:
stdout = fab.run(host, txt)
except Exception, e:
stdout = str(e)
return stdout

result = execute("23.23.23.23", "uname -a")

它只是输出以下内容并无限期地保持这种状态。超时似乎不起作用。如果它能更详细一点就更好了,这样我就可以调查发生了什么。

[12.45.241.11:22] 运行:uname -a

最佳答案

我不确定您使用此代码片段的最终目标是什么。如果您试图通过将它放在类中来隔离修改 env 的影响,那是行不通的。它是结构中的全局模块级,无论您在哪里修改它(通过分配就像您在这里所做的那样)它都将应用于任何后续代码。我认为您可能真正想要的是:

from fabric.api import run, execute, task, settings

@task
def custom_runner(command):
"""Runs command with custom key_filename"""
with settings(warn_only=True, key_filename=r"C:\.ssh\dev.pub"):
result = run(command, timeout=5)
return result

result = execute(custom_runner, "uname -a", host="23.23.23.23")

请记住,“fab”命令行实用程序不能按原样使用它,因为它会在 fab 加载 fabfile 后立即执行该代码(结果 = execute...)。这将是严格的图书馆使用。

您可以使用 roledefs 像这样对主机进行分组。结果对象将是一个字典,其中每个主机是一个键,对应的值是任务的返回对象。你几乎不想使用一个简单的 Exception 子句,Fabric 有它自己的方法来防止异常导致你的程序终止。

关于python - fabric: run() 挂起,没有任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23530955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com