Python结构响应输出中的提示

时间:2017-03-14 04:55:10

标签: python ssh fabric

我有两个问题,我试图用面料来解决python。

  1. 我想在提示符下自动输入密码:
  2. 我想根据会话的输出自动响应提示:
  3. 这些都应该是可能的,如上面的链接所示,但我不能让它们工作。当我通过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: 
    

    我需要做些什么来自动输入密码并自动回答此提示?

1 个答案:

答案 0 :(得分:0)

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

  

这本词典主要供内部使用,并且已经填写   自动作为每主机字符串密码缓存。钥匙是完整主机   字符串和值是密码(字符串)。

重要的注意事项是上面的警告:

  

警告

     

如果您手动修改或生成此dict,则必须使用   具有用户和端口值的完全限定主机字符串。请参阅链接   上面有关主机字符串API的详细信息。

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

至于提示,只要你在<{em>里面 with块中运行命令(我不能从你的示例代码中告诉),这应该有效。同时检查提示后面是否有空格,如果没有从prompts键中删除它。