带有铃铛和口哨的可导入cli passthrough。
CLI-passthrough的Python项目详细描述
自述文件
此项目在终端中提供一个入口点cli-passthrough
,该入口点接受任意数量的参数,并作为自己的命令运行这些参数除少数特殊情况外,这将向终端输出命令的确切内容,包括使用转义序列进行的任何格式化组合的stdout和stderr都记录在logs/history.log
中,并保留顺序,stderr本身记录在/logs/stderr.log
。这些日志文件是实时写入的终端的输出也是实时的
这个项目的动机是在另一个需要通过cli使用的应用程序上创建一个包装器。我还想使用CLI中的包装器我想查看我正在实时调用的程序的输出,以相同的格式,并记录所有内容。换言之,我想要以下内容:
- 任何命令:运行几乎所有给它的命令。
- 灵活的日志记录:独立地捕获STDUT和STDER,以实现灵活的日志记录。
- 顺序保持:保持stdout和stderr的顺序
- 实时输出:实时输出到屏幕,即不等待命令在转储到屏幕前退出。
- 保留格式:保留ANSI转义序列,以便大多数内容仍被格式化为不通过此传递运行
1 | 2 | 3 | 4 | 5 | 6 | note | |
---|---|---|---|---|---|---|---|
os.system | Y | N | Y | Y | Y | Y | Doesn't capture output at all |
os.popen | N | N | Y | N | N | Y | Deprecated & obsolete |
os.exec* | Y | N | - | N | N | N | Really not the intended use |
pexpect | Y | N | Y | Y | Y | Y | Bad logging |
subprocess.popen + threads | Y | Y | Y | N | Y | Y/N | Threads just enable separate logging, not realtime output |
subprocess.popen + pty | Y | Y | Y | Y | Y | Y | We got it! |
已知限制
subprocess.popen+pty的实现目前有以下限制:
它不会运行every命令,只是大多数命令。
ssh
不起作用:/它假设终端的大小。如果它检测到运行python的终端,并使用相同的维度,那就更好了
这在很大程度上是从this SO post改编(复制)的。我只是把它包装成一个可导入的函数,给它一个cli本身,并做了基本的日志记录来说明这一点。你可以自己复制/粘贴/编辑。
如果您发现更好的请告诉我!我很乐意升级或更换这个。这是我迄今为止发现的最好的