gpt4 book ai didi

java - 从 Java 在 Linux 上执行 grep 命令总是返回 null

转载 作者:太空狗 更新时间:2023-10-29 12:00:22 27 4
gpt4 key购买 nike

我在 linux 文件上从 java 执行 grep 命令。对于以下代码,它始终返回 null。

Process p;
String matchStr="testmatch";
String output = null;
try {
String command = "grep \""+matchStr+"\" "+ filename;
System.out.println("Running command: " + command);

p = Runtime.getRuntime().exec(command);

System.out.println("***********************************");
System.out.println("***********************************");
System.out.println("***********************************");

p.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

while (br.readLine() != null) {
System.out.println("in while loop");
System.out.println("in while loop");
System.out.println("in while loop");
System.out.println(output);
System.out.println("***********************************");
System.out.println("***********************************");
System.out.println("***********************************");
System.out.println("***********************************");

// Process your output here
}

System.out.println("exit: " + p.exitValue());
p.destroy();
} catch (Exception e) {
e.printStackTrace();
}

如果我直接对它进行 grep,它会显示输出,但是从 java 中它永远不会进入 while 循环。请在这里提出问题。

最佳答案

问题是您没有向 output 写入任何内容,因此它保持为 null。我猜你必须像这样重写你的 while 循环

while ((output = br.readLine()) != null) {
// Process your output here
}

请注意,大多数样式检查都不鼓励使用此语法,因为它存在歧义

在 while 循环之后放置 p.waitFor() 也是一个好主意,这样 grep 就不会卡在 flushig std(err|out) 上。

更新

使用 ProcessBuilder 也是个好主意(自 起可用)而不是 Runtime.getRuntime().exec(...) 因为您可以更好地控制流程,即

final ProcessBuilder builder = new ProcessBuilder();
builder.command("grep", matchStr, filename);

// redirect stderr to stdout
builder.redirectErrorStream(true);

final Process process = builder.start();

BufferedReader br = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String output = null;
while ((output = br.readLine()) != null) {
System.out.println(output);

// Process your output here
}

process.waitFor();

关于java - 从 Java 在 Linux 上执行 grep 命令总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com