【问题标题】:How to wrap a CLI program in Python (keeping the interactivity)?如何在 Python 中包装 CLI 程序(保持交互性)?
【发布时间】:2023-12-22 08:11:01
【问题描述】:

我想为交互式 CLI 程序(Asterisk CLI)编写一个包装器。

基本上,我需要保持与 CLI 的交互(包括制表符补全),但我想过滤 Asterisk 的输出,以便仅显示与给定模式匹配的行。

我尝试了一种基于 select() 的方法,使用 popen.popen4 并将星号 stdout_and_stderr 和 sys.stdin 放在 read_fs 中,但它有点不起作用。

谁能给我一些好的指点?

非常感谢, 安德烈亚

【问题讨论】:

  • “有点行不通”。那没有帮助。什么没用?你有什么问题?如果你想要一个具体的答案,请提出一个具体的问题。有细节。

标签: python select wrapper command-line-interface interactive


【解决方案1】:

Pexpect 可能对你有用:http://sourceforge.net/projects/pexpect/

网页描述:“Pexpect 是一个 Python 模块,用于生成子应用程序;控制它们;并响应其输出中的预期模式。Pexpect 可用于自动化交互式应用程序,例如 ssh、ftp、passwd、telnet 等. Pexpect 是纯 Python。”

【讨论】:

  • pexpect 将解决 OP 一直存在的所有令人讨厌的缓冲问题,并且是我解决此问题的选择。
【解决方案2】:

http://code.google.com/p/py-asterisk/

简介

Python Asterisk 包(代号为 py-Asterisk)试图为 Asterisk Manager API 生成高质量、有据可查的 Python 绑定。

该包的最终目标是允许在 Python 中对 Asterisk 配置进行丰富的规范,而不是在我们称之为 Asterisk 配置文件的古怪、非结构化、无文档的混乱中。

工作功能

实现管理器客户端和事件调度器的 Python 包。 管理器 API 的面向用户的命令行界面。

【讨论】: