跳转到主要内容

具有丰富功能的可导入CLI-passthrough。

项目描述

README

安装

使用pip install cli-passthrough / pip install -e .安装,如果您有此仓库。

如何使用

从终端

$ cli-passthrough echo 'hi'
hi
$ echo 'hi'
hi
$ cli-passthrough python --error
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
$ python --error
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.

从Python

In [1]: from cli_passthrough import cli_passthrough

In [2]: cli_passthrough("echo 'hi'")
hi
Out[2]: 0

In [3]: cli_passthrough("python --error")
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
Out[3]: 2

这是做什么的?

此项目在终端提供了一个入口点cli-passthrough,它接受任意数量的参数,并将这些参数作为自己的命令运行。除了一些特殊情况外,这将将命令的输出(包括使用转义序列进行的任何格式化)精确地输出到终端。组合的stdout和stderr都按顺序记录在logs/history.log中,而stderr本身则记录在/logs/stderr.log中。这些日志文件实时写入。终端的输出也是实时的。原始意图是将所有输出回显到屏幕上,同时保存stdout和stderr。未来的工作将是将这些输出也返回给Python。

此项目的动机是为另一个需要通过CLI使用的应用程序创建一个包装器。我还想从CLI使用这个包装器。我想实时查看我被调用的程序的输出,以相同的格式,并记录一切。换句话说,我想做到以下

  1. 任何命令:运行它给出的几乎任何命令。
  2. 灵活的日志记录:独立捕获stdout和stderr以进行灵活的日志记录。
  3. 顺序保留:保留stdout和stderr的顺序
  4. 实时输出:实时输出到屏幕,即不要在将输出到屏幕之前等待命令退出。
  5. 退出状态:捕获退出代码
  6. 格式保留:保留ANSI转义序列,因此大多数内容仍然以未通过此旁路运行的方式格式化。
1 2 3 4 5 6 注意
os.system 完全不捕获输出
os.popen 已弃用且过时
os.exec* - 并非预期用途
pexpect 日志记录不好
subprocess.popen + 线程 是/否 没有实时输出,因为它通常依赖于块的缓冲区刷新。
subprocess.popen + pty 我们做到了!

已知限制

目前,subprocess.popen + pty 的实现有以下限制:

  1. 它不会运行 每个 命令。需要用户输入的命令无法工作,例如 sshipython

  2. 它假设了终端大小。如果它检测到运行的 Python 的终端,并使用相同的尺寸会更好。

这主要是从 这个 SO 帖子 调整(复制)的。我只是将其包装成一个可导入的函数,为其本身提供了一个 CLI,并进行了基本的日志记录以说明这一点。您可以随意复制/粘贴/调整它。

如果您找到更好的方法 请通知我!我将非常乐意升级或替换它。这仅仅是我迄今为止找到的最好的方法。

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

CLI-passthrough-0.1.3.linux-x86_64.tar.gz (6.9 kB 查看哈希)

上传时间

构建分布

CLI_passthrough-0.1.3-py2.py3-none-any.whl (6.6 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面