Python telnetlib:令人惊讶的问题

2024-01-25

我正在使用 Python 模块 telnetlib 创建一个 telnet 会话(使用国际象棋服务器),但我遇到了一个我实在无法解决的问题。下面的代码可以完美运行:

>>> f = login("my_server") #code for login(host) below.
>>> f.read_very_eager()

这会输出服务器通常在登录时打印的所有内容。但是,当我将它放入函数中然后这样调用它时:

>>> def foo():
...   f = login("my_server")
...   return f.read_very_eager()
...
>>> foo()

我什么也没得到(空字符串)。我可以检查登录是否正确执行,但由于某种原因我看不到文本。那么它会被吞到哪里呢?

非常感谢。

为了完整起见,这里是登录(主机):

def login(host, handle="guest", password=""):
try:
    f = telnetlib.Telnet(host) #connect to host
except:
    raise Error("Could not connect to host")
f.read_until("login: ")
try:
    f.write(handle + "\n\r")
except:
    raise Error("Could not write username to host")
if handle == "guest":
    f.read_until(":\n\r")
else:
    f.read_until("password: ")
try:
    f.write(password + "\n\r")
except:
    raise Error("Could not write password to host")
return f

当您手动尝试但在函数中却不起作用的原因是,当您手动尝试时,服务器有足够的时间对登录做出反应并将数据发回。当所有功能都集中在一个功能中时,您可以将密码发送到服务器,并且无需等待服务器回复足够长的时间。

如果您更喜欢(可能更正确)技术答案:

在文件 telnetlib.py (我的 Windows 计算机上的 c:\python26\Lib\telnetlib.py)中,函数read_very_eager(self) calls self.sock_avail()现在,函数sock_avail(self)执行以下操作:

def sock_avail(self):
    """Test whether data is available on the socket."""
    return select.select([self], [], [], 0) == ([self], [], [])

它的作用非常简单:如果有任何东西可以从我们的套接字读取(服务器已应答),它将返回 True,否则它将返回 False。

所以呢read_very_eager(self)所做的是:检查是否有任何内容可供阅读。如果有,则从套接字读取,否则仅返回空字符串。

如果你看一下代码read_some(self)您会发现它不会检查是否有任何数据可供读取。它会尝试读取,直到有可用的内容为止,这意味着如果服务器在回答您之前花费了 100 毫秒,那么它会在返回答案之前等待 100 毫秒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python telnetlib:令人惊讶的问题 的相关文章

  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • ctypes 加载 dll 时没有错误消息,但什么也没发生

    我尝试在ctypes中使用windll LoadLibrary将dll文件导入python 尽管没有任何错误消息 但头文件中列出的函数似乎都没有成功加载 我想知道是dll文件有问题 还是我错误地使用了windll LoadLibrary方法
  • 我应该使用课程吗? (Python)

    我正在尝试编写一个包含一些数学函数的小型 Python 模块 例如 它可能包含如下函数 def quad x a b c return a x 2 b x c 您可能会注意到它包含几个参数 即a b c 除了变量x 现在 如果我将其放入文件
  • 使用 POST 时 Django 中的 MultiValueDictKeyError

    我是 Django Rest 框架的新手 被要求编写我们项目的令牌身份验证部分 需要注意的一件事是 因为我将来不会使用默认的管理站点 所以我编写了登录 注销 注册功能 并通过 POSTMAN 测试了功能 我现在想做的是让新用户注册 登录和注
  • matplotlibplot_曲面图

    matplotlib 教程提供了如何绘制球面的一个很好的示例 from mpl toolkits mplot3d import Axes3D import matplotlib pyplot as plt import numpy as n
  • 无头无尽滚动硒

    from selenium import webdriver from selenium webdriver common by import By from selenium common exceptions import StaleE
  • 这个 cProfile 结果告诉我需要修复什么?

    我想提高Python脚本的性能并且一直在使用cProfile生成性能报告 python m cProfile o chrX prof bgchr py args 我打开这个chrX prof使用 Python 的文件pstats并打印出统计
  • Scrapy - 如何抓取网站并将数据存储在 Microsoft SQL Server 数据库中?

    我正在尝试从我们公司创建的网站中提取内容 我在 MSSQL Server 中为 Scrapy 数据创建了一个表 我还设置了 Scrapy 并配置了 Python 来抓取和提取网页数据 我的问题是 如何将Scrapy爬取的数据导出到我本地的M
  • 卸载我安装的所有 Python 包及其依赖项,而不用破坏我的 Mac

    有很多问题 但正确的方法似乎是手动卸载不需要的所有内容 pip 在卸载时不会卸载包的依赖项 https stackoverflow com questions 7915998 does uninstalling a package with
  • pandas 在单元格中缩写字典

    我有一个相当复杂的嵌套字典 它使用 pandas 很好地打印为 html 但是 有一个字典作为打印在单元格中的值之一 如下所示 pd set option display max colwidth 1 已设置 所以这不应该是问题 这是产生问
  • 谷歌应用程序引擎 urlfetch gzip 到字符串

    使用 Google App Engine 我尝试从包含一个 csv 文件的 URL 中获取 gzip 文件 最终我想在我的网页上输出csv文件的内容 我现在有以下代码 usr bin env python import webapp2 fr
  • Python 和 C#:IronPython 是绝对必要的吗?

    我主要是一名 C 程序员 但剩下的一个项目让我有 2 个选择 调用 python 脚本 保存为 py 文件 并处理返回值 或者 用C 重写整个python脚本 共6个 py文件 当然 如果我可以简单地实现选项 1 选项 2 就是一个主要的时
  • 对多索引进行排序,同时尊重其索引结构

    如何在尊重级别组织的同时对多索引数据框进行排序 例如 鉴于以下df 假设我们根据C 例如按降序排列 C D E A B bar one 0 346528 1 528538 1 three 0 136710 0 147842 1 flux s
  • Django 多个具有相同名称的输入字段值

    我需要一些帮助 如何处理具有多个输入字段值且名称相同的表单 而且只有一次查看 这实际上是针对基本问题的形式 我发现这个方法的另一个想法https stackoverflow com a 478406 6396981 https stacko
  • 初始化 dask 分布式工作线程的状态

    我正在尝试做类似的事情 resource MyResource def fn x something dosemthing x resource return something client Client results client m
  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di

随机推荐

  • LINQ 表达式语法如何与 Include() 一起使用以进行预加载

    我在下面有一个查询 但我想执行 Include 来急切加载属性 Actions 有一个导航属性 User Action User 1 我的基本查询 from a in Actions join u in Users on a UserId
  • 在使用 SQL Server 数据库邮件创建的电子邮件中嵌入图像

    我正在仅在 SQL Server 中开发电子邮件解决方案 该解决方案将使用数据库邮件发送 HTML 格式的电子邮件 问题是 HTML 中的图像需要嵌入到外发电子邮件中 如果我使用 net 应用程序来生成和发送电子邮件 这不会成为问题 但不幸
  • 用于验证带扩展名的 Windows 和 Linux 路径的正则表达式

    我正在尝试编写一个函数 该函数将验证给定路径在带有文件扩展名的 Linux Windows 中是否有效 ex Windows路径 D DATA My Project 01 07 03 061418738709443 docLinux路径 s
  • PHP 中的文件夹作为参数

    我想创建一个脚本 将网站中请求的每个文件夹作为参数传递 例如 如果有人请求 www example com foo 这将被重定向到主index php并作为参数传递 在请求时得到相同的结果www example com index php
  • Java中如何实现并发读取映射到内存的文件?

    我有很多线程同时读取同一个文件 总共大约100M 并且只有一个线程更新文件 我想将文件映射到内存中以减少FILE I O 在 Java 中如何做到这一点 我基本上考虑了以下2种方法 用字节数组存储文件 多线程读取时每次创建ByteArray
  • 为什么 CarPlay 在真车上会崩溃?

    我有一个音频应用程序并已实现 CarPlay 我已按照本指南添加 CarPlay 支持 https blog fethica com add carplay support to swiftradio https blog fethica
  • 您在开发中如何处理 SSL?

    我有一个应用程序 它的一些路由与ssl 要求 http github com rails ssl requirement插入 它已部署并且在生产中运行良好 问题是如何在开发中最好地处理这个问题 因为目前我只是简单地破解我的routes rb
  • 使用php从h1标签获取所有值

    我想接收一个包含文本中所有 h1 标签值的数组 例如 如果给定的输入字符串 h1 hello h1 p random text p h1 title number two h1 我需要接收一个包含以下内容的数组 titles 0 hello
  • SQL Reporting Services - Mozilla 中未显示打印按钮

    我在用SQL 报告服务 它工作正常并显示打印按钮IE 但在 Mozilla Firefox 中未显示 有人有什么主意吗 我已经检查过这个解决方案 但它不起作用 http social msdn microsoft com Forums en
  • 网络直径是什么意思?

    上图所示这个链接 http en wikipedia org wiki Vertex 28graph theory 29的 具有 6 个顶点和 7 个边的图 其中最左侧的 6 号顶点是叶顶点或下垂顶点 有直径4吗 对还是错 定义是 图的直径
  • Sequelize关系查询返回重复数据

    我正在使用 Sequelize 关系查询指定客户的客户订单 index js var results2 await customerService getOrders 1 console log results2 服务 js exports
  • Firefox 中的大子字符串比 Chrome 快约 9000 倍:为什么?

    基准 http jsperf com substringing http jsperf com substringing 因此 我正在启动我的第一个基于 HTML5 浏览器的客户端项目 本质上 它必须将非常非常大的文本文件解析为一个或多个对
  • 同时使用 INADDR_ANY 和特定 IP 绑定到同一端口

    python 中的一个简单实验 在 Windows 上 表明我能够同时绑定到通配符地址和特定地址上的同一端口 import socket import select MY PORT 13337 sany socket socket sany
  • 使用 Contains 方法检查 List 中的 float 时的 C# 准确性

    我有一个清单floats 并想要检查它是否已经包含特定值List Contains 方法 我知道对于float您经常无法使用的相等性测试 但类似的东西myFloat value lt 0 001 我的问题是 Contains方法说明了这一点
  • VB.NET 中的递归文件搜索

    我有一个函数可以对文件进行递归目录搜索 但是当我搜索驱动器时 我收到访问被拒绝错误 从而停止搜索 我怎样才能避免这些错误 这是我使用的函数 lstSearch GetFilesRecursive FolderBrowserDialogMai
  • Mockito Matchers isA、any、eq 和 Same 之间有什么区别?

    我对它们之间的区别以及在哪种情况下选择哪一个感到困惑 有些差异可能很明显 例如any and eq 但我将它们全部包括在内只是为了确定 我想知道它们的差异 因为我遇到了这个问题 我在 Controller 类中有这个 POST 方法 pub
  • 在没有锁定的情况下读取同时修改的整数变量是否安全?

    假设我在一个类中有一个整型变量 并且这个变量可能会被其他线程并发修改 写入受互斥体保护 我也需要保护读取吗 我听说有一些硬件架构 如果一个线程修改一个变量 而另一个线程读取它 那么读取的结果将是垃圾 在这种情况下 我确实需要保护读取 但我从
  • 如何在 WebPack 构建环境中将 CryptoJS 与 Angular 2 和 TypeScript 一起使用?

    关于将 CryptoJS 库与 Angular 2 一起使用存在很多问题 但大多数都假设使用 SystemJS 并且所有问题似乎都与当前版本的 TypeScript 过时了 任何人都可以就如何将 CryptoJS 库与 Angular 2
  • glViewport 在 Android 和 iOS 中的不同结果

    我刚刚开始使用 opengl es 为我的跨平台框架 iOS 和 Android 开发渲染器 当我到达视口内容 分屏内容所需 时 我注意到 iOS 和 Android 之间存在差异 这是两张图片 Android其实还有一个毛病 它似乎结束了
  • Python telnetlib:令人惊讶的问题

    我正在使用 Python 模块 telnetlib 创建一个 telnet 会话 使用国际象棋服务器 但我遇到了一个我实在无法解决的问题 下面的代码可以完美运行 gt gt gt f login my server code for log