Я пытаюсь программно прочитать вывод, написанный приложением, работающим в определенной панели tmux, чтобы я мог определить, когда отправлять ему ключи из управляющего процесса.
В частности, я хотел бы автоматически вводить пароль, но не хочу вводить его, пока не буду уверен, что появится запрос на ввод пароля.
Моя текущая попытка состояла в том, чтобы использовать tty
, чтобы найти управляющий tty
, а затем передать его pyserial
, чтобы попытаться прочитать, так как он, похоже, может читать tty
. Обратите внимание, что в реальном приложении у меня есть другие способы узнать tty
.
К сожалению, как только я запускаю следующий код, целевая панель tmux немедленно закрывается.
import serial
ser = serial.Serial('/dev/ttys013', timeout=1)
Можно ли таким образом читать с pty?
Я работаю на OSX, но был бы признателен за решение, которое работает как на Linux, так и на OSX.
Как правило, с python вы должны использовать pexpect
для запуска программы и взаимодействия с ней через pty, но если у вас уже есть программа, работающая в tmux, вы можете просто использовать команду tmux pipe-pane
, чтобы сохранить копию в файле того, что записано в экран. Например, для панели номер 1 вы можете дать команду оболочки:
tmux pipe-pane -t 1 'cat >/tmp/capture'
а затем хвост файла /tmp/capture
. (Используйте tmux pipe-pane -t 1
, чтобы остановиться).
Чтобы избежать опроса, вы можете вместо этого использовать fifo.
Вы пытались открыть tty как файл вместо последовательного порта? Большинство последовательных библиотек будут писать на устройство, чтобы установить такие вещи, как четность или скорость передачи, даже если вы этого не скажете. Это может быть причиной того, что tty ведет себя так, как он. Просто откройте его как файл. Я делал такие вещи, используя
cat
илиtail
в bash, не затрагивая tty. Если вы можете сделать это в bash, вы можете сделать это в программе