是否可以使用fabric将命令传递给交互式shell?

时间:2016-01-12 23:00:23

标签: python fabric devops

我试图通过Fabric自动执行以下操作:

  1. SSH到远程主机。
  2. 执行python脚本(Django management command dbshell)。
  3. 传递已知值以提示脚本生成。
  4. 如果我手动执行此操作,则需要:

    $ ssh -i ~/.ssh/remote.pem ubuntu@10.10.10.158
    ubuntu@10.10.10.158$ python manage.py dbshell
    postgres=> Password For ubuntu: _____   # i'd like to pass known data to this prompt
    postgres=> # i'd like to pass known data to the prompt here, then exit
    

    ======

    我目前的解决方案类似于:

    from fabric.api import run
    from fabric.context_managers import settings as fabric_settings
    
    with fabric_settings(host_string='10.10.10.158', user='ubuntu', key_filename='~/.ssh/remote.pem'):
        run('python manage.py dbshell')
        # i am now left wondering if fabric can do what i'm asking....
    

2 个答案:

答案 0 :(得分:1)

在此通过推特回复Sean,但首先要查看的是http://docs.fabfile.org/en/1.10/usage/env.html#prompts - 不完美但在某些情况下可能就足够了:))

即将推出的v2在管道中有一个更加可靠的实现此功能,理想情况下还可以选择更像pexpect的API(意思是更多串行导向)作为选项。

答案 1 :(得分:0)

您可以使用运行系统的 Pexpect 并检查输出,如果输出与给定模式匹配,Pexpect可以作为人类输入进行响应。