Popen.stdin.write не работает с Python3 - PullRequest
0 голосов
/ 12 октября 2019

Popen.stdin.write не работает с Python3

Я инициирую подключение telnet к удаленному устройству и начинаю отправку команд. Ниже приведен простой пример, который устанавливает telnet-соединение с удаленным устройством и начинает посылать команды specfifc устройства [т.е. "vr", "KP on"]


import subprocess

telnet_client = subprocess.Popen(
    ["telnet", "192.168.1.120", "4002"],
    stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
    universal_newlines=True)

#Get Version
telnet_client.stdin.write('vr\n')
telnet_client.stdin.flush()

#Power on the device
telnet_client.stdin.write('kp on\n')
telnet_client.stdin.flush()

#Factory default
telnet_client.stdin.write('fd\n')
telnet_client.stdin.flush

Каждый stdin.write() не выбрасываетлюбое исключение или любая ошибка, просто возвращает количество записанных байтов. Но на самом деле сообщение не отправляется.

Ubuntu machine1:

Я заметил, что после установки Python3 на машине вышеописанная реализация перестала работать с Python2.7

Ubuntu machine2:

На другом компьютере с Ubuntu после установки Python3 описанная выше реализация работает с Python2.7, но не работает с Python3.

Так что обычная вещь в любом направлении Popen.stdin.write не работаетработать с Python3. Я считаю, что некоторые пакеты портят систему.

Пожалуйста, дайте мне знать об этом

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Это все установлено.

На самом деле сервер получает данные после вызова stdin.flush

telnet_client.stdin.write('vr\n')
telnet_client.stdin.flush()
0 голосов
/ 13 октября 2019

Я столкнулся с той же проблемой. process.stdin.write() работает в Python 2.7, но не в Python 3. Хотя я не мог отладить проблему, я смог достичь функциональности с process.communicate(). Документация . Это рекомендуемый способ общения с процессом. Кроме того, строка, которую мы передаем в качестве входных данных этому методу, должна заканчиваться '\n'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...