如何在python REPL中维护Bash输出格式

时间:2013-05-16 21:12:51

标签: python bash shell ipython

我有一个python脚本,在bash shell周围创建一个瘦包装器。它通过子进程模块包装bash调用,获取输出,并对其进行一些操作。

我的输出包含换行符“\ n”,但没有其他颜色或空格格式(即制表符)。

在Ipython中,您可以直接执行shell builtins,例如“ls”。输出格式化(带着色和间距)几乎与直接从bash shell执行“ls”命令的输出相同。

知道Ipython如何模仿shell输出格式吗?它们是否特殊包装不同的命令?

如果您不熟悉Ipython,有关如何在我的python脚本的REPL中重新创建bash格式而不必为不同命令创建显式映射和逻辑的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

我可能在这里错了,但我不认为ipython在这里任何

当您输入!ls时,这只会发送到ls。在我的系统上,我只看到一个简单的黑白单行文件列表,就像我将ls重定向到文件然后完成{{1}一样在那个文件上。即使我的bash shell中的cat别名为lsls -FG也会忽略它。

因此,如果您正在获取任何花哨的格式,那么因为您已经配置!ls(例如,通过env变量)来做一些奇特的事情。

然而,在ipython和你的代码之间有一点可能有所不同:我相信ipython只是让子进程打印到它的标准输出。但是您正在捕获该标准输出并手动将其路由到您自己的输出。这意味着bash及其所有子进程将能够告诉他们的stdout不是TTY,并可能相应地更改其输出。

因此,您不能将bash的标准输出重定向到管道,您必须将其重定向到pty,或其他类似TTY的内容。