2011-10-14 94 views
0

我試圖用python的庫「telnetlib」連接bbs,試圖讓機器人回答用python連接telnet

這條消息。當我回覆信息時,機器人返回超過1條信息。這些是我的

代碼。

# -*- coding: cp950 -*- 
import telnetlib,random 
#f= open("ans.txt","r") 
ans = [b"oao", b"xd"] 
'''while True: 
line = f.readline() 
if line = "": 
    break 
ans.append(line) 
''' 

tn = telnetlib.Telnet("ptt.cc") 
tn.read_very_eager() 
tn.write(b"*****\r\n") # this is where i enter my username 
tn.read_very_eager() 
tn.write(b"*****\r\n") # this is wher i enter my password 
tn.read_very_eager() 
tn.write(b"\r\n") 

while True: 
if tn.read_very_eager() != "" : 
    tn.write(b"") 
    tn.read_very_eager() 
    tn.write(b"su\r\n") 
    tn.read_very_eager() 
    tn.write(b"\r\n") 
    tn.read_very_eager() 
    tn.write(b"\r\n\r\n←") 
    tn.read_very_eager() 
    tn.read_very_eager() 
    for i in range(0,1000000): 
     x = 1 
+0

你能解釋一下'消息'的含義嗎?什麼預期和你得到了什麼? – RedBaron

+0

數到100萬?進口時間 time.sleep(1.0) – MatthieuW

+0

請提供very_eager功能。沒有這一點,調試幾乎是不可能的。 – Stellarator

回答

0

首先,我絕對沒有使用telnet的經驗。

看看Python documentation on telnetlib我可以看到你的代碼和文檔頁面底部的例子有一些區別。主要區別在於它們等待提示登錄或提供密碼。即使您的 應該做同樣的事情,它更清楚read_until。它可以解決你的問題,或給你一個暗示。

嘗試調整示例以適應您的需求。

import sys 
import telnetlib 

HOST = 'ptt.cc' 
user = 'username' 
password = 'pass123' 

tn = telnetlib.Telnet(HOST) 

tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

# Do anything you need to here. 
# If your server will accept these, try them first to isolate the problem 
tn.write("ls\n") 
tn.write("exit\n") 

print tn.read_all() 

正如MatthieuW所說,你可以睡在時間庫裏。

from time import sleep 

print 'Start' 
sleep(1) 
print 'One second later'