Python Fabric: Как ответить на ввод с клавиатуры? - PullRequest
23 голосов
/ 11 февраля 2010

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

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

Ответы [ 6 ]

36 голосов
/ 11 февраля 2010

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

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

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

password = fabric.operations.prompt("What is your password?")
13 голосов
/ 11 февраля 2010

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

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

yes | rm *.txt


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

1 голос
/ 15 февраля 2011

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

1 голос
/ 11 февраля 2010

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

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

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

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

0 голосов
/ 26 января 2018

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

Другая точка:

  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')
0 голосов
/ 29 сентября 2017

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

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