单选题
136.在Python的telnetlib中以下哪个方法可以非阻塞的读取数据?
A
telnet.read very eager0
B
telnet.read all
C
telnet.read very lazy
D
telnet.read eager
答案解析
正确答案:A
解析:
这道题考察的是 Python `telnetlib` 库中不同读取方法的行为特性,特别是关于“阻塞”与“非阻塞”的区别。
### 正确答案分析
**答案:A** (注:选项 A 中的 `read very eager0` 应为排版错误,实际对应的方法名是 `read_very_eager`)
在 `telnetlib.Telnet` 类中,有几个用于读取数据的方法,它们的区别主要在于等待数据的方式:
1. **`read_very_eager()`**:
* **行为**:尝试从内部缓冲区读取所有可用数据。如果缓冲区中没有数据,它**不会阻塞**等待网络数据到来,而是立即返回空字符串 `b''`。
* **特点**:非阻塞(Non-blocking)。适用于需要轮询检查是否有数据到达,而不希望程序挂起的场景。
2. **`read_eager()`**:
* **行为**:读取容易获得的数据。如果缓冲区为空,它会短暂等待(阻塞),直到有数据到达或超时。
* **特点**:轻微阻塞。
3. **`read_lazy()`**:
* **行为**:处理并返回队列中已存在的数据,不主动去 socket 获取新数据。如果队列为空,返回空字符串。
* **特点**:非阻塞,但通常用于更底层的处理,不如 `read_very_eager` 常用作为“非阻塞读取”的标准答案。
4. **`read_all()`**:
* **行为**:读取所有数据,直到连接关闭。
* **特点**:**阻塞**(Blocking)。它会一直等待直到 EOF(End Of File),即连接断开。
### 选项辨析
* **A. `telnet.read very eager0`**:虽然写法有误(多了空格和0),但明显指向 `read_very_eager()`。这是标准的非阻塞读取方法,如果没有数据立即可用,它就返回空,不会卡住程序。
* **B. `telnet.read all`**:对应 `read_all()`,这是完全阻塞的,直到连接结束。
* **C. `telnet.read very lazy`**:`telnetlib` 中没有 `read_very_lazy` 这个方法,只有 `read_lazy()`。即使指 `read_lazy`,它也是非阻塞的,但在常见的考试语境中,`read_very_eager` 是更典型的“尝试读取所有可用数据且不阻塞”的代表。此外,选项名称本身也是错误的。
* **D. `telnet.read eager`**:对应 `read_eager()`,它在缓冲区为空时会阻塞等待数据,因此不是纯粹的非阻塞方法。
### 总结
题目问的是“**非阻塞**的读取数据”,`read_very_eager()` 的设计初衷就是在没有数据时立即返回,不造成阻塞,因此是最符合题意的选项。
> **注意**:在实际 Python 代码中,正确的方法调用是 `telnet.read_very_eager()`,选项中的写法存在明显的格式错误,但不影响对其所指代方法的判断。
题目纠错
华为ICT练习考试题库
相关题目
单选题
824.以下两条配置命令可以实现路由器RTA去往同一目的地10.1.1.0的路由主备备份。 
单选题
823.网络结构和OSPF分区如图所示,图中除了RTA之外,路由器RTB、RTC和RTD都是ABR路由器。 
单选题
822.如图所示的广播网络中,OSPF运行在四台路由器上,且在同一个区域,同一网段。OSPF会自动选举一个DR,多个BDR,从而达到更好的备份效果。 
单选题
821.如图所示,路由器R1上部署了静态NAT命令,当PC访问互联网时,数据包中的目的地址不会发生任何变化。 
单选题
820.SNMP报文是通过UDP来承载的。
单选题
819.MPLS标签头封装在报文的数据链路层头部和网络层头部之间。
单选题
818.AC使用CAPWAP的控制隧道传输对Fit AP的管理报文。
单选题
817.AP无需AC即可独立完成无线用户接入、无线用户认证、业务数据转发的工作。
单选题
816.Trunk 端口既能发送带标签的数据帧,也能发送不带标签的数据帧。
单选题
815.缺省情况下,华为交换机的桥优先级取值是32768。
