Как отправить EOF в stdin в парамико?


Я хотел бы выполнить некоторую программу через ssh и перенаправить ее вход из файла. Поведение следующего кода:

channel.exec_command('cat')
with open('mumu', 'r') as f:
    text = f.read()
    nbytes = 0
    while nbytes < len(text):
        sent = channel.send(text[nbytes:])
        if sent == 0:
            break
        nbytes += sent

Должно быть эквивалентно (предполагая аутентификацию с открытым ключом):

 ssh user@host cat < mumu

Однако приложение зависает в ожидании дополнительных входных данных. Я думаю, это происходит потому, что поток stdin никогда не закрывается. Как мне это сделать?

2 4

2 ответа:

Вызов shutdown() (или shutdown_write()) на канале.

Вызовите метод: channel.shutdown_write().