如何在Python Socket中处理按键输入?

3 投票
1 回答
1168 浏览
提问于 2025-04-18 06:54

我正在写一个基于套接字的“python cmd 类似”的服务器模块,这个模块可以支持一些命令行交互功能,比如自动补全或者命令历史记录。这样的话,简单的“telnet”或者“nc”客户端就可以连接到服务器,读取或设置服务器上的一些内容。

经过搜索,我发现有很多模块可以处理“cmd”部分,比如Python的标准模块“cmd”、"ipython",甚至还有vty模拟器。不过,我找不到一个可以直接绑定到套接字上,来检测按键输入的模块,比如“tab”键或者“control+c”键。大多数模块只能处理读取的行,这样就不适合用“tab”键进行自动补全,或者用上下键查看命令历史。

我觉得这个问题可以简化为:

有没有可能在不阻塞的情况下读取套接字的按键输入,然后在服务器端处理这个按键输入,比如将ASCII码加1,然后再回显到套接字,让客户端看到?

谢谢你的帮助。

1 个回答

1

你想要的事情是做不到的。正如你所说,你想写一个基于套接字的 cmd 类似的服务器。这个服务器会打开一个套接字,监听来自客户端的数据。现在,确实可以一个字符一个字符地读取套接字输入(这和非阻塞读取是不一样的),但这对你并没有帮助。

决定如何以及何时发送数据的是客户端程序。所以如果客户端程序决定“吃掉”制表符和控制字符,那么你就根本看不到它们。因此,如果你想逐个处理按键,你还需要一个客户端应用程序。

撰写回答