Как управлять интерактивным сеансом ssh с помощью подпроцесса PythonPython

Программы на Python
Ответить
Anonymous
 Как управлять интерактивным сеансом ssh с помощью подпроцесса Python

Сообщение Anonymous »

Я пытаюсь управлять интерактивным сеансом ssh из Python, поэтому не запускаю команду ssh user@host (на которую есть множество ответов), а ssh user@host< /code> затем запись/чтение из этого сеанса ssh из 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)
проблема в том, как читать proc.stdout:
  • Код: Выделить всё

    proc.stdout.readlines()
    не работает, поскольку никогда не возвращает EOF, поэтому блокируется
  • Код: Выделить всё

    proc.stdout.readline()
    работает, если есть одна строка данных, но proc.stdout не возвращает '', если она пуста, поэтому невозможно прочитать ее, а если данных нет, она блокируется
  • и poll всегда говорят, что proc.stdout «готов» для чтения, независимо от того, будет ли proc.stdout.readline() работать на самом деле.
Есть предложения?

Изменить: здесь код python2.7, но решения для python3 будут тоже все будет хорошо.
Редактировать: используя proc.communicate() здесь не подходит, так как он ожидает завершения процесса, и я хочу продолжать читать/записывать в него.

Подробнее здесь: https://stackoverflow.com/questions/612 ... subprocess
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»