我有一个运行并显示GUI窗口的程序。它还在shell上打印了很多东西。我需要查看打印的第一件事和打印的最后一件事。问题是,当程序终止时,如果我滚动到窗口的顶部,则删除打印时打印的东西。所以在程序期间打印的东西现在位于顶部。这意味着我无法查看打印的第一件事。
我也试过> out.txt
,但问题是当我手动关闭GUI窗口时,文件才会被关闭和读取。如果它被发送到文件,屏幕上什么都没有打印,我无法知道程序是否完成。我也无法修改任何代码。
有没有办法可以看到shell上打印的整个文本列表?
由于
答案 0 :(得分:1)
当程序的输出进入终端窗口时,程序通常会在每个换行符后刷新其输出。这就是您以交互方式查看输出的原因。
当您将程序的输出重定向到out.txt
时,它只会在其内部缓冲区已满时刷新其输出,这可能是在每个8KiB输出之后。这就是为什么你没有立即看到文件中的任何内容,并且你看不到程序打印的最后一些内容,直到它退出(并刷新它的最后一个部分完整的缓冲区)。
你可以欺骗程序认为它正在使用script
命令将其输出发送到终端:
script -q -f -c myprogram out.txt
此script
命令运行myprogram
连接到新分配的“伪终端”(或简称为pty
)。这会诱使myprogram
认为它正在与终端通信,因此它会在每个换行符上刷新其输出。 script
命令将myprogram
的输出复制到终端窗口和文件out.txt
。
请注意,script
会向out.txt
写一个标题行。我找不到在我的测试Linux系统上禁用它的方法。
在上面的例子中,我假设你的程序没有参数。如果是,则需要将程序和参数放在引号中:
script -q -f -c 'myprogram arg1 arg2 arg3' out.txt
或者将程序命令行放在shell脚本中,并将该shell脚本传递给script
命令。
答案 1 :(得分:1)
您可以使用tee
命令在终端上获取文件中的输出/错误:
your-command |& tee out.log
虽然请记住,默认情况下此输出是行缓冲的(大小为4k)。