Robot 的 Telnet 库是如何工作的?

How does Robot's Telnet library work?

我一直在看 Robot 的 Telnet 库(https://github.com/robotframework/robotframework/blob/master/src/robot/libraries/Telnet.py),但我没有在文档中找到这个问题的答案。

我知道 Telnet 对象处理 TelnetConnections 的打开和关闭,并存储当前连接。但是当调用 write 之类的东西时,Robot 怎么知道调用 Telnet._conn.write()?

例如:

Open connection  192.254.64.3
Open connection  192.254.64.4
Write            This goes to the second IP

Telnet 库使用一些内省魔法,由 RF 动态库接口支持。

使用Telnet库时,调用get_keyword_names。这也会检查 TelnetConnection class 自己的方法并将它们注册为关键字。在执行期间 RF 调用,例如Telnet.write,由__getattr__方法处理,进而调用底层TelnetConnection的对应方法。

整个机制在第 308-240 行中实现。