我將Arduino設置爲服務器。在終端(I使用的是Mac),一個可連接到它,看到輸出,並關閉連接如下:從python中讀取telnet連接的實時輸出
> 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行,沒有延遲。然後我嘗試使用telnetlib
在Python腳本中重新創建此連接。
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(':')
無濟於事。
我產生疑問:
- 有什麼辦法來拉一次在一個行,假設輸入流是連續的,有效永無止境?
- 這是如何在Python中實現的?
謝謝。
編輯: 我已經包含了Arduino代碼的void循環。
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);
}
}
arduino上的服務器代碼是什麼樣的? –
我編輯了問題以包含代碼。 –
Telnet通常在端口23上服務,你可以確認你的服務器正在使用端口23尋找一條線,如'Adafruit_CC3000_Server senseServer(PORT);' –