似乎运行./program | tee /dev/null
似乎消耗了它的输出。当它自己运行时,程序会打印一些文本,然后在通过UDP套接字进行通信时继续运行。它产生了许多我希望以过滤方式查看的日志消息,因此我尝试运行./program | grep -v "I dont wan't to see logs like this!" | tail -f
但它没有产生输出。我放弃了一点,决定只将tee
输出到另一个文件,然后我可以用我的编辑器进行检查,但结果是一个空文件。
有问题的程序是由学生编写的,所以问题可能在其中。什么可能导致这种行为?我该如何纠正?
要点:
./program
打印output
,但./program | tee /dev/null
不打印任何内容。问题可能在./program
的来源内,但如何正确使用它?
答案 0 :(得分:1)
这通常发生在有问题的程序检查它是否与终端连接并且对终端与非终端做不同的事情时。解决此问题并捕获输出的最简单方法是使用脚本:
script -c "./program" /dev/stdout | grep -v "I dont wan't to see logs like this!" | tail -f
script
将在伪终端中运行程序(因此它会认为它连接到终端)并将输出写入/dev/stdout
,然后将其传送到grep
您可能还希望-f
的{{1}}参数在每次写入后使其刷新输出(否则在写入管道之前将对其进行缓冲)。