【问题标题】:Python fabric respond to prompts in outputPython 结构响应输出中的提示
【发布时间】:2017-03-14 04:55:10
【问题描述】:

我有两个问题正在尝试用 fabric for python 解决。

  1. 我想在提示符下自动输入密码:
  2. 我想根据会话的输出自动响应提示:

正如上面的链接所示,这两个都应该是可能的,但我无法让它们工作。当我通过fab test运行以下文件时

from fabric.api import run, env, settings

env.hosts = ['<user>@<host>']
env.passwords = {'<user>@<host>': '<password>'}

def test():
    with settings(prompts={"Please select a menu item: ": "1",}):
        return
    run("ls")

我的输出是:

[<user>@<host>] Login password for '<user>':

此时我必须输入我的密码,而不是自动输入。然后根据远程主机,我得到一个我想自动响应的菜单,但是 我的提示的自动完成功能不起作用

[<user>@<host>] out: <a menu>
[<user>@<host>] out: Please select a menu item: 

我需要做什么才能自动输入我的密码并自动回答这个提示?

【问题讨论】:

  • 您好,您知道如何解决您的问题吗?
  • 不走运。我还是很想知道怎么做。

标签: python ssh fabric


【解决方案1】:

如果您查看env.passwords 上的文档,它会说:

这本词典主要供内部使用,已填满 自动作为每个主机字符串的密码缓存。键是完整的主机 字符串和值是密码(字符串)。

重要的是上面的警告:

警告

如果你手动修改或生成这个dict,你必须使用 具有用户和端口值的完全限定主机字符串。见链接 上面有关于主机字符串 API 的详细信息。

按照上述警告,确保主机名是 FQDN,甚至可能添加端口号 :22 并查看它是否有效。

至于提示,只要您在with 块中运行命令inside(我无法从您的示例代码中看出),它就应该可以工作。还要检查提示后面是否有空格,如果没有,请将其从您的 prompts 键中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-05
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多