0

我有一个 python 脚本,可以在 bash shell 周围创建一个薄包装器。它通过 subprocess 模块包装 bash 调用,获取输出,并对其进行一些处理。

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

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

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

如果您不熟悉 Ipython,有什么想法可以在我的 python 脚本的 REPL 中重新创建 bash 格式,而无需为不同的命令创建显式映射和逻辑?

谢谢

4

1 回答 1

1

我在这里可能是错的,但我不认为 ipython 在这里做任何事情

当您键入时!ls,这只是ls. 在我的系统上,我只看到一个纯黑底白字每行一个文件的列表,就像我重定向ls到一个文件然后cat对该文件执行 a 一样。即使在我的 bash shell 中ls有别名,也会忽略它。ls -FG!ls

所以,如果你得到任何花哨的格式,那是因为你已经配置ls(例如,通过环境变量)来做一些花哨的事情。

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

因此,您不能只将 bash 的 stdout 重定向到管道,您必须将其重定向到pty或其他类似 TTY 的东西。

于 2013-05-16T21:32:17.667 回答