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 предметов.
Поздний ответ, но надеюсь, что это поможет людям, имеющим схожие проблемы.
Другой момент:
- Ответьте на два или более различных ввода в консоли.
- Поддержка параллельного режима.
- Любой тип ввода
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")