2016-01-12 4 views
1

Я пытаюсь автоматизировать следующие через Fabric:Можно ли использовать ткань для передачи команд интерактивной оболочке?

  1. SSH на удаленный хост.
  2. Выполните скрипт python (Django management command dbshell).
  3. Передайте известные значения подсказкам, которые генерирует сценарий.

Если бы я сделать это вручную, это было бы что-то вроде:

$ ssh -i ~/.ssh/remote.pem [email protected] 
[email protected]$ 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.... 

ответ

0

Вы можете использовать Pexpect, который запускает систему и проверяет выход, если выход соответствует заданному рисунку Pe xpect может ответить как человеческая типизация.

1

Ответил Шон через Twitter на это, но первое, что нужно проверить здесь http://docs.fabfile.org/en/1.10/usage/env.html#prompts - не идеальное, но может быть достаточно в некоторых ситуациях :)

Предстоящий v2 имеет более прочную реализацию этой функции в трубы, и в идеале это будет иметь место для большего количества pexpect-like API (что означает, что-то более ориентированное по сериальности) в качестве опции.