2013-08-31 1 views
2

У меня есть паук для пауков в течение нескольких дней. Обычно я стараюсь проверять статистику как количество элементов, которые она соскабливает, и так далее. Я просто запускаю следующие cmds в терминале, и это дает мне статистику.Python telnetlib для подключения к Scrapy Telnet для чтения статистики

$ telnet [IP] [PORT] 
>>> spider.name 
alf-spider 
>>> stats.get_stats() 
... 

Теперь я хочу сделать это с помощью Python с помощью telnetlib, но я не могу достичь вышеуказанных результатов. Ниже приведен мой код на Python.

#!/usr/bin/env python 

import sys 
import getpass 
import telnetlib 

HOST = "192.168.1.5" 

def main(): 
    ports = ['6023'] 
    if len(sys.argv) > 1: 
     ports = sys.argv[1].split(',') 

    for port in ports: 
     get_stats(port) 

def get_stats(port): 
    tn = telnetlib.Telnet(HOST, port) 
    tn.write("spider.name\n") 
    print tn.read_all() 

if __name__ == '__main__': 
    main() 

Выше кода, если он бежал, просто зависает, пока сила не закрыта. Что мне не хватает?

+0

Вы пробовали отладить этот код? Добавление распечаток, чтобы вы могли понять, где этот код висит? –

+0

Да. tn.read_all() никогда не возвращается. –

+0

ОК, может быть, это дает нам ключ? 'Telnet.read_all() Читать все данные до EOF; блок, пока соединение не будет закрыто. ' –

ответ

0

Это будет работать.

#!/usr/bin/env python 

import sys 
import getpass 
import telnetlib 

HOST = "192.168.1.5" 

def main(): 
    ports = ['6023'] 
    if len(sys.argv) > 1: 
     ports = sys.argv[1].split(',') 

    for port in ports: 
     get_stats(port) 

def get_stats(port): 
    tn = telnetlib.Telnet(HOST, port) 
    tn.read_until('>>>') 
    tn.write("spider.name\n") 
    print tn.read_until('>>>') 
    tn.close() 

if __name__ == '__main__': 
    main()