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 明确支持这一点:

一个备用接口可用于普通的 readline()。一些应用程序需要将键盘 I/O 与文件、设备或窗口系统 I/O 交错,通常通过使用主循环来选择()各种文件描述符。为了满足这种需求,readline 也可以作为事件循环中的“回调”函数调用。有一些函数可以让这变得简单。

此功能是否可通过 Python 获得? 是否可以将Cmd 类用于此目的?

【问题讨论】:

你为哪个版本的 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的主要内容,如果未能解决你的问题,请参考以下文章

在python中执行异步并发api请求

使用 cmd.exe 或 PowerShell 或 Python 从 Windows 命名管道中读取

python如何向cmd发送命令

可以使用python打开命令提示符吗?

python-celery专注于实现分布式异步任务处理任务调度的插件!

python subcommand.Popen调用不同目录下的脚本时cmd.exe弹出新窗口