Чтение живого вывода из соединения telnet в python

У меня Arduino настроен как сервер. В терминале (я использую Mac) можно подключиться к нему, просмотреть выходные данные и закрыть соединение следующим образом:

> telnet HOST
Trying 192.168.0.101...
Connected to HOST.
Escape character is '^]'.
0 , 25486 , 0.00 :
1 , 25754 , 0.00 :
2 , 26054 , 0.00 :
3 , 26320 , 0.00 :
4 , 26642 , 0.00 :
5 , 26912 , 0.00 :
6 , 27187 , 0.00 :
7 , 27452 , 0.00 :
8 , 27774 , 0.00 :
0 , 28068 , 2.72 :
1 , 28389 , 2.72 :
2 , 28695 , 2.72 :
3 , 29002 , 2.72 :
4 , 29272 , 2.72 :
5 , 29537 , 2.72 :
6 , 29806 , 2.72 :
7 , 30112 , 2.72 :
8 , 30389 , 2.72 :
^]
telnet> quit
Connection closed.

В настоящее время данные передаются со скоростью около 5 строк в секунду без задержки. Затем я попытался воссоздать это соединение в скрипте Python, используя telnetlib,

import telnetlib
import time

tn = telnetlib.Telnet(HOST)
tn.set_debuglevel(1)

while True:
tn_read = tn.read_very_eager()
time.sleep(1)
print repr(tn_read)

Этот скрипт возвращает только пустые строки. Я читал о проблеме с синхронизацией, поэтому я включил ручную задержку. Я также пытался tn.read_until(':') но безрезультатно.

Мои итоговые вопросы:

  1. Есть ли какой-нибудь способ вытащить по одной линии за раз, если предположить, что входящий поток непрерывен и практически бесконечен?
  2. Как это реализовано в Python?

Спасибо.

РЕДАКТИРОВАТЬ:
Я включил цикл void для кода Arduino.

void loop(void){
// Handle any multicast DNS requests
mdns.update();

// Handle a connected client.
Adafruit_CC3000_ClientRef client = senseServer.available();
if (client) {
Serial.println("Connected");
for(int i = 0; i < 9; i ++){ //sets number of channels
client.print(i);
client.print(" , ");
stamp = millis();
client.print(stamp);
client.print(" , ");
client.print(R2);
client.println(" :");
delay(10);
}
e = e + 1;
R2 = pow(2.718,e);
}
}

1

Решение

Можете ли вы работать на более низком уровне, используя socket модуль?

import socket
s = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.0.101", 23))

while True:
data = str(s.recv(1024),encoding='utf-8')
print(data)

Почему это должно работать: кажется, что ваш сервер не является полным сервером telnet (требует входа в систему и т. Д.), А является сокетом, который ожидает соединения, а затем возвращает данные.

Поскольку сервер — это просто сокет, вы можете подключиться к нему с помощью простого сокета, что и делает вышеописанное. Я проверил это двумя способами. Сначала с сервером Telnet Звездных войн в towel.blinkenlights.nlи, во-вторых, с простым сервером Python, который ждет соединения, а затем возвращает строку текста каждую секунду (для имитации вашего сервера).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]