Мне нужно автоматизировать несколько сценариев 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] "
так что я могу решить, какой ответ пройти.
Это то, чего expect
:
https://likegeeks.com/expect-command/
Ожидать и bash https://unix.stackexchange.com/questions/351446/bash-and-expect-in-the-same-script
autoexpect
делает все это <3
autoexpect
может быть очень полезным. linux.die.net/man/1/autoexpect . Удачи с вашим проектом
shell=True
и передать только последнюю строку в оболочку. Текст приглашения дляread
будет при стандартной ошибке, а не при стандартном выводе.proc = Popen('read -r -p "test" abc',shell=True,stderr=PIPE,stdin=PIPE) proc.stderr.read(1) # <--- hangs