具有丰富功能的可导入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使用这个包装器。我想实时查看我被调用的程序的输出,以相同的格式,并记录一切。换句话说,我想做到以下
- 任何命令:运行它给出的几乎任何命令。
- 灵活的日志记录:独立捕获stdout和stderr以进行灵活的日志记录。
- 顺序保留:保留stdout和stderr的顺序
- 实时输出:实时输出到屏幕,即不要在将输出到屏幕之前等待命令退出。
- 退出状态:捕获退出代码
- 格式保留:保留ANSI转义序列,因此大多数内容仍然以未通过此旁路运行的方式格式化。
1 | 2 | 3 | 4 | 5 | 6 | 注意 | |
---|---|---|---|---|---|---|---|
os.system | 是 | 否 | 是 | 是 | 是 | 是 | 完全不捕获输出 |
os.popen | 否 | 否 | 是 | 否 | 否 | 是 | 已弃用且过时 |
os.exec* | 是 | 否 | - | 否 | 否 | 否 | 并非预期用途 |
pexpect | 是 | 否 | 是 | 是 | 是 | 是 | 日志记录不好 |
subprocess.popen + 线程 | 是 | 是 | 是 | 否 | 是 | 是/否 | 没有实时输出,因为它通常依赖于块的缓冲区刷新。 |
subprocess.popen + pty | 是 | 是 | 是 | 是 | 是 | 是 | 我们做到了! |
已知限制
目前,subprocess.popen + pty 的实现有以下限制:
-
它不会运行 每个 命令。需要用户输入的命令无法工作,例如
ssh
或ipython
。 -
它假设了终端大小。如果它检测到运行的 Python 的终端,并使用相同的尺寸会更好。
这主要是从 这个 SO 帖子 调整(复制)的。我只是将其包装成一个可导入的函数,为其本身提供了一个 CLI,并进行了基本的日志记录以说明这一点。您可以随意复制/粘贴/调整它。
如果您找到更好的方法 请通知我!我将非常乐意升级或替换它。这仅仅是我迄今为止找到的最好的方法。
项目详情
关闭
CLI-passthrough-0.1.3.linux-x86_64.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b71b7f777d4b18ed3b6d4b232e9b33a3e065291bc5e254c6df0b443a3eda617f |
|
MD5 | b1ab4cb63382e7309c1b071241a7a4e4 |
|
BLAKE2b-256 | f673a26855d13e32b14b00d2f093a1de881275f2a17146ca502bc076d7de7280 |
关闭
CLI_passthrough-0.1.3-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ab407862f520baacfedff6ab6bcb9985f56832e6bb1d2f7deb111d9bd305deb5 |
|
MD5 | ba9b222f5a4de3f1e08f36db6c2cb0ef |
|
BLAKE2b-256 | 53f9fab7e9a395d0f7825d6d19662ebad060ac3f0686d4b9b8ae70d1dd1a8212 |