标准输出和标准错误 - 并排预览

3
我希望能够在程序执行期间将标准输出和标准错误分开,并且能够并排查看它们。
我所知道的所有解决方案都需要将一个或两个流重定向到文件中。
我的解决方案:
1. 将标准输出和标准错误重定向到不同的文件中,然后在单独的终端窗口或tmux/screen内使用`tail -f`命令预览这两个文件。这需要三个终端窗口——一个用于命令调用,另外两个用于预览。
2. 只将标准错误重定向到文件中,然后在单独的终端窗口中使用`tail -f`命令预览该文件。这需要两个终端窗口——一个用于命令调用和标准输出,另一个用于预览标准错误。
这两种解决方案都不太方便,因为你需要运行多个命令并在不同的终端窗口之间切换。
是否有更好的解决方案?有没有避免重定向到文件的方法?

请点击这里,查找“watching both stdout and stderr”以获取可能的创意开端。基本上,它将是一个Python包装器,运行您的脚本并在您编写代码时显示输出。绝对不像现成的实用程序那样简单... - Peter Bowers
也许screen ... exec可以使用?我从未使用过,但似乎有一些潜力。 - Peter Bowers
@PeterBowers,我正在寻找一种包装器来避免重定向到文件。我尝试过将屏幕作为简单的在线程序或脚本执行,但没有成功,我也不想为此创建单独的屏幕配置文件。 - tmp
这里提供了一种在 Python 中实现文本滚动的方法。 - Peter Bowers
如果您选择的平台是Perl,这里有一些相关内容。或者更好的是,这里提供了至少解决问题一半所需的参考和代码。 - Peter Bowers
还有一个针对perl/tk中处理stderr的链接。由于它会自动将其放在单独的窗口中,这可能会解决问题? - Peter Bowers
2个回答

7
因为OP特别要求并排展示,一个选项是:tmux! (虽然tmux有点重,但我认为它的分裂窗格做得很好,例如:)
  1. $ tmux
  2. 分割您的窗格:
  3. 从左到右:

    ^b + %
    (^b表示ctrl+b)

  4. 从上到下:

    ^b + "

  5. 聚焦您的错误窗格:

    ^b + ↑↓→← + enter

  6. $ tty,复制您的错误窗格的设备文件

  7. 重新聚焦您的输出窗格:

    ^b + ↑↓→← + enter

  8. $ your-command 2>/dev/pts/N

    其中/dev/pts/N是您从其他窗格中复制的值

不错! :camera-flash:

让我开心一整天!<3 - hellow
如果您想要更简单的体验,可以使用命名管道:$ mkfifo <name> $ less -f <name> $ command 2> <name> - Andrea Reina
ps,要交换窗格,默认的主机键是“^b”和任何箭头键,关闭您的shell以关闭窗格。 - ThorSummoner

5
如果你想避免文件创建,可以按照以下步骤操作:
1. 开启一个新的终端,在其中输入“tty”命令,查找该终端的设备特殊文件,例如“/dev/ttys002”。
2. 在原始终端中,运行以下命令:
yourProgram 2> /dev/ttys002

我使用这个作为测试程序:

#!/bin/bash
for i in {0..30}; do
   echo hi
   echo hi to stderr >&2
done

通常在输出到远程终端之前,您必须设置权限。并不是我曾经这样做来困惑同学或工作同事... :-) - Peter Bowers
1
@PeterBowers 这让我松了一口气,因为我从未登录到朋友的Solaris盒子上并将任何音频文件以最大音量播放;-) - Mark Setchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接