2012-08-08 61 views
0

因此,我无法实际打印发出“帮助”命令后看到的所有信息。我是否需要更改skt.receive()的长度?或者有没有办法简单地打印所有通过的数据?似乎必须有一种方法来解释您想要打印未知长度的数据?或者我以错误的方式接近这一点。 谢谢。从Python 3.0中使用Telnet打印Ascii文本

#!/usr/bin/python 

host = '192.168.1.50' 
port = 23 
msg = "help\r" 
msg2 = "y\r" 


import socket 
import sys 
import time 

try: 
    skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
except socket.error, e: 
    print("Error creating socket: %s" % e) 
    sys.exit(1) 

try: 
    skt.connect((host,port)) 
except socket.gaierror, e: 
    print("Address-related error connecting to server: %s" % e) 
    sys.exit(1) 
except socket.error, e: 
    print("Error connecting to socket: %s" % e) 
    time.sleep(15) 
    skt.connect((host,port)) 
    sys.exit(1) 

try: 
    print(skt.send(msg)) 
    skt.send('help\r') 
    print("SEND: %s" % msg) 
except socket.error, e: 
    print("Error sending data: %s" % e) 
    sys.exit(1) 

while 1: 
    try: 
     buf = skt.recv(50000000000) 
     if(len(buf)): 
      print(buf) 
      if 'AMX' in buf: 
       print("Length buff") 
       if 'AMX' in buf: 
        print(skt.send(msg)) 
        #print("first wait") 
        #print("RECV: %s" % buf) 
        #time.sleep(9) 
        #print("second wait") 
        sys.exit(1) 

    except socket.error, e: 
     print("Error receiving data: %s" % e) 
     sys.exit(1) 
    if not len(buf): 
     break 
    sys.stdout.write(buf) 
+0

“因此,我无法实际打印出发出”帮助“命令后看到的所有信息”之后我猜想某些文本部分是写入的,因此您确定字符串中没有转义字符?或者是足够大的缓冲区? – Leri 2012-08-08 13:04:14

+0

这就是我要问的?我是否需要知道缓冲区有多大或者是否有其他解决方法? – inbinder 2012-08-08 13:11:44

+0

如果在缓冲区中写入数据时缓冲区小于数据,则其某些部分会丢失。 – Leri 2012-08-08 13:15:33

回答

3

您是否考虑过使用telnetlib,而不是重新发明轮子? :)

例子:

import telnetlib 

HOST = "192.168.1.50" 

tn = telnetlib.Telnet(HOST) 
tn.write("help\n") 
print tn.read_all() 
+0

你能提供一些关于我如何实现它的建议吗?我在python编程方面颇为新颖。我正在使用Python3.0 – inbinder 2012-08-08 13:12:15

+0

请参阅编辑。包括一个小例子。 – favoretti 2012-08-08 13:19:28

0

所以telnetlib DEF使事情变得更容易,并简化了过程。没有意义重新发明轮子。