Я пытаюсь управлять интерактивным с sh сеансом с python - поэтому не запускаю ssh user@host command
(на который есть множество ответов), но ssh user@host
затем пишу в / чтение из этого сеанса s sh из Python.
То, что я пробовал, всегда начинается с:
import subprocess as sp
import sys
ssh_cmd = ["ssh", "-tt", "whoever@myhost"]
proc = sp.Popen(ssh_cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
while True:
stdin = raw_input('enter command: ')
proc.stdin.write(b'%s\n' % stdin)
проблема в том, как читать pro c .stdout:
proc.stdout.readlines()
не работает, так как он никогда не возвращает EOF, поэтому он блокирует proc.stdout.readline()
работает, если готова одна строка данных, но proc.stdout
не работает t возвращает '', когда пусто, поэтому нет возможности прочитать его, и если нет данных, он блокирует select
и poll
всегда говорят, что proc.stdout
«готов» для чтения, независимо от того, или нет proc.stdout.readline()
на самом деле будет работать.
Есть предложения?
Редактировать: код здесь python2 .7, но решения для python3 тоже подойдут. Редактировать: использование proc.communicate()
здесь не вариант, так как ожидание завершения процесса sh, и я хочу продолжать чтение / запись в него.