Python中的异步cmd或readline
Posted
技术标签:
【中文标题】Python中的异步cmd或readline【英文标题】:Asynchronous cmd or readline in Python 【发布时间】:2016-01-22 09:17:00 【问题描述】:我想编写一个简单的程序,它(1)同时产生输出行,(2)通过命令行(通过 readline)接受用户的输入。 (例如,考虑一个文本模式的聊天客户端。我希望能够编写我的聊天消息,同时仍然可以看到收到的传入聊天消息。)为了实现这一点,我希望能够异步调用 readline。
Readline 库通过其callback interface 明确支持这一点:
此功能是否可通过 Python 获得? 是否可以将Cmd 类用于此目的?一个备用接口可用于普通的 readline()。一些应用程序需要将键盘 I/O 与文件、设备或窗口系统 I/O 交错,通常通过使用主循环来选择()各种文件描述符。为了满足这种需求,readline 也可以作为事件循环中的“回调”函数调用。有一些函数可以让这变得简单。
【问题讨论】:
你为哪个版本的 Python 编写代码? 我使用的是 Python 2.7.6,但我很高兴能在任何版本的 Python 中得到答案。 【参考方案1】:有些安装的python支持readline
接口,有些不支持。找出答案的唯一方法是通过测试。 import readline
工作或提高和ImportError
?
python cmd
模块用于完全不同的目的,包括制作自己的 shell,在这种情况下没有帮助。
即使readline
模块不可用,也可以使用线程完成类似的任务。
【讨论】:
我不认为“cmd”是为了“完全不同的目的”。我想要 cmd,但输入是非阻塞的。 我确实有 readline。我的问题是如何使用它来完成我想要的。【参考方案2】:不,cmd
对 readline 的使用不包括使用回调接口。你无法使用它来完成想要的事情。
但是,您可以使用threading
完成您想要的操作。在一个线程中阻止网络读取和打印聊天消息;对 cmd
进行阻塞调用,执行 cmd,然后网络写入另一个线程。
【讨论】:
以上是关于Python中的异步cmd或readline的主要内容,如果未能解决你的问题,请参考以下文章
使用 cmd.exe 或 PowerShell 或 Python 从 Windows 命名管道中读取