#python #bash
#python #bash
Вопрос:
Я только начал использовать pexpect
, чтобы попытаться установить пакеты, для установки которых требуется много входных данных. Я пытаюсь установить пакет Homebrew, используя Pexpect здесь.
Вот команда для установки homebrew :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Когда я ввожу эту команду, я сначала получаю это приглашение : Password:
Затем я получаю подсказку Press RETURN to continue or any other key to abort
.
Я попытался написать скрипт с использованием pexpect для установки скриптов.
import pexpect as px
import getpass
password = getpass.getpass() #Password as a string from the user
px.run('''/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"''') #Triple quotes because command contains double quotes
px.expect('Password:')
px.send(password)
px.expect('Press RETURN to continue or any other key to abort')
px.send('n')
Это правильный способ автоматизировать установку этого скрипта? Пожалуйста, дайте мне знать, если это нормально.
Большое спасибо, и я действительно ценю вашу помощь!
Комментарии:
1. во многих программах, которые получают данные из
stdin
(например,keyboard
в консоли), вы можете создать файл со всеми ответами (в разделенных строках) и запуститьprogram < all_answers.txt
, но я не знаю, будет ли это работать с паролем, потому что он может использовать специальную функцию для скрытия пароля2. Верен ли этот скрипт, который я написал? Я уже нашел способ скрыть пароль. Дайте мне знать, может ли этот скрипт работать
3. просто попробуйте ваш скрипт и посмотрите, работает ли он.
4. сначала запустите, и если вы получите сообщение об ошибке, то покажите его в вопросе. Не ожидайте, что мы запустим его — и он может корректно работать на наших компьютерах, но не работать на вашем компьютере.
5. смотрите документацию для run() — кажется, что она запускает код и ожидает его завершения, и вы не можете использовать ее с
expect
иsend
. Вам нужно было быspawn()
использоватьexpect
иsend
. Илиrun(... events={"Password:": password, ...})