是否有可能获得“的输出?”;尾部-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”的问题了吗?我被它绊倒了——无法从这种命令中获得任何输出