Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有可能获得“的输出?”;尾部-f“;命令到java程序?_Java_Shell_Logging_Process_Iostream - Fatal编程技术网

是否有可能获得“的输出?”;尾部-f“;命令到java程序?

是否有可能获得“的输出?”;尾部-f“;命令到java程序?,java,shell,logging,process,iostream,Java,Shell,Logging,Process,Iostream,根据: 我认为这是可能的,但我有以下问题 String TailCommand = "tail -f /path/PATH.txt| grep (...)"; Runtime r = Runtime.getRuntime(); Process p = r.exec(TailCommand); //handle buffer while (running) { // handle output } 进程p终止。与“top”或“tail-f”不同,它可以很好地处理没有持续更新的命令

根据:

我认为这是可能的,但我有以下问题

String TailCommand = "tail -f /path/PATH.txt| grep (...)";
Runtime r = Runtime.getRuntime();
Process p = r.exec(TailCommand);

//handle buffer

while (running) {
    // handle output
}
进程p终止。与“top”或“tail-f”不同,它可以很好地处理没有持续更新的命令

我想知道我是否遗漏了什么,是否存在缓冲区限制或其他问题? 我正在使用eclipse,但我想这不会对流程行为产生任何影响

事实上,也许有另一种简单的方法来解决我错过的问题。我用的是“tail-f”,因为我必须分析大量的(一些GBs)日志,这些日志不断追加,不打算打开它并读取整个文件。我只需要控制附加行。但是,我没有找到合适的尾部实现


提前感谢。

您不能从java内部执行管道命令

如果需要管道输出,请执行“/bin/sh”,如下所示:

String tailCommand = "/bin/sh -c 'tail -f /path/PATH.txt| grep (...)'";
此外,java程序必须以足够快的速度使用进程的输出,以便其缓冲区不会溢出


您可能想阅读本文,了解在尝试从Java执行进程时常见的陷阱。

我假设您想要
-f
跟随行为?所以尾巴永远不会结束?+1-尽管如此,管道不会“溢出”。相反,如果您的Java应用程序读取输出速度不够快,则外部命令将在写入各自的输出管道时暂停。谢谢,它可以工作。至少部分地。。。管道可以很好地处理不更新的命令。例如:“tail-FILE | grep-whatever”-有效,“tail-f-FILE”(无管道)-有效,“tail-f-FILE | grep-whatever”-无数据(进程未消亡)。嘿@abecedeacede,您解决了关于“tail-f test.log | grep-abc”的问题了吗?我被它绊倒了——无法从这种命令中获得任何输出