Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

yes | rm *.txt


(источник: wikimedia.org)

Ответ 2

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

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

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

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

Ответ 3

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

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

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

% 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 элементов. Код >

Ответ 5

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

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

  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')

Ответ 6

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

run("echo yes|./manage.py rebuild_index")