Python Fabric: Как ответить на ввод с клавиатуры?

Я хотел бы автоматизировать ответ на некоторый вопрос, вызванный некоторыми программами, например, MySQL запрашивает пароль, или может запросить "да" или... когда я хочу перестроить свой индекс стога сена с помощью./manage.py rebuild_index,

Для MySQL я могу использовать ключ --password=, и я уверен, что apt имеет "тихую" опцию. Но как я могу передать ответ другим программам?

6 ответов

Решение

Почему ты не можешь просто использовать трубы?

Например, для автоматического автоматического принятия, просто используйте yes, который просто выводит бесконечный поток y,

yes | rm *.txt

http://upload.wikimedia.org/wikipedia/en/thumb/f/f6/Pipeline.svg/280px-Pipeline.svg.png

Если вы ищете пользователя для подтверждения операции, используйте метод confrim.

if fabric.contrib.console.confirm("You tests failed do you want to continue?"):
  #continue processing

Или, если вы ищете способ получить ввод от пользователя, используйте метод подсказки.

password = fabric.operations.prompt("What is your password?")

Разрабатываемая версия Fabric (1.0a) теперь поддерживает взаимодействие с удаленными программами. http://docs.fabfile.org/1.0a/usage/interactivity.html

Оба эти метода действительны и работают.

Я выбрал первый, потому что не хотел взаимодействовать с моей системой развертывания.

Итак, вот решение, которое я использовал:

% yes | ./manage.py rebuild_index

WARNING: This will irreparably remove EVERYTHING from your search index. Your choices after this are to restore from backups or rebuild via the rebuild_index команда. Вы уверены, что хотите продолжить? [y/N] Удаление всех документов из вашего индекса, потому что вы так сказали. Все документы удалены. Индексация 27 предметов.

Поздний ответ, но надеюсь, что это поможет людям, имеющим схожие проблемы.

Другой момент:

  1. Ответьте на два или более различных ввода в консоли.
  2. Поддержка параллельного режима.
  3. Любой тип ввода yes/no/y/n включен.

проблема

[hostxxx] out: Type 'c' if you want to use the Commercial Edition.
[hostxxx] out: Type 'o' if you want to use the Open Source Edition.
[hostxxx] out: Type '3' to view the GNU General Public License version 3.
[hostxxx] out: Type 'L' to view the Lesser GNU General Public License version 2.1.
[hostxxx] out: Type 'yes' to accept this license offer.
[hostxxx] out: Type 'no' to decline this license offer.

Решение:

использование printf вместо yes чтобы добавить больше гибкости, в то же время это работает как шарм на parallel Режим.

@parallel
def demo_multi_input():
    run('printf "o\nyes\n"|./configure --prefix=/home/work/bin/qt')

Используйте этот код:

run("echo yes|./manage.py rebuild_index")
Другие вопросы по тегам