【问题标题】:Python telnetlib to connect to Scrapy Telnet to read statsPython telnetlib 连接到 Scrapy Telnet 以读取统计信息
【发布时间】:2013-08-31 20:07:57
【问题描述】:

我有一个 Scrapy 蜘蛛运行了好几天。我通常会尝试检查统计信息,例如它已经刮掉了多少项目等等。我只是在终端中运行以下 cmds,它会为我提供统计信息。

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

现在我想使用 telnetlib 使用 Python 来执行此操作,但我无法达到上述结果。以下是我的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()

上面的代码如果运行只是挂起,直到强制关闭。我错过了什么?

【问题讨论】:

  • 你试过调试这段代码吗?添加打印输出以便您了解这段代码挂在哪里?
  • 是的。 tn.read_all() 永远不会返回。
  • 好的,也许这给了我们一个线索? Telnet.read_all() Read all data until EOF; block until connection closed.
  • 是的,似乎服务器没有发送任何响应。这就是它停滞不前的原因。
  • 好吧,尝试发送"spider.name\r\n"

标签: python scrapy telnet telnetlib


【解决方案1】:

这会起作用。

#!/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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多