Получить текст командной строки bash read из родительского процесса

1

Мне нужно автоматизировать несколько сценариев bash, которые включают ответ на read запросов с помощью y/n.

Я попытался подключить stdout/stderr/stdin к скрипту python. Запись на stdin работает, но чтение подсказки из stdout/stderr не по какой-то причине? (Я могу прочитать все остальное, что вывод bash или sub-process прекрасен).

>>> from subprocess import Popen, PIPE
>>> proc = Popen(['bash','-c','read -r -p "Update system? [y/N] " response'],stdout=PIPE,stdin=PIPE,stderr=PIPE)
>>> proc.stdout.read(10) # <-- hangs, same with stderr, any length

Я ожидал, что смогу прочитать появившееся сообщение "Update system? [y/N] " так что я могу решить, какой ответ пройти.

  • 0
    Кроме того, вы можете также установить shell=True и передать только последнюю строку в оболочку. Текст приглашения для read будет при стандартной ошибке, а не при стандартном выводе.
  • 0
    @tripleee хмм ... все еще не могу заставить его работать: proc = Popen('read -r -p "test" abc',shell=True,stderr=PIPE,stdin=PIPE) proc.stderr.read(1) # <--- hangs
Показать ещё 1 комментарий
Теги:
python-3.x

1 ответ

1
Лучший ответ

Это то, чего expect:

https://likegeeks.com/expect-command/

Ожидать и bash https://unix.stackexchange.com/questions/351446/bash-and-expect-in-the-same-script

  • 1
    OMG, autoexpect делает все это <3
  • 1
    Да, autoexpect может быть очень полезным. linux.die.net/man/1/autoexpect . Удачи с вашим проектом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню