gpt4 book ai didi

java - 如何使管道与 Runtime.exec() 一起工作?

转载 作者:太空狗 更新时间:2023-10-29 12:42:35 25 4
gpt4 key购买 nike

考虑以下代码:

String commandf = "ls /etc | grep release";

try {

// Execute the command and wait for it to complete
Process child = Runtime.getRuntime().exec(commandf);
child.waitFor();

// Print the first 16 bytes of its output
InputStream i = child.getInputStream();
byte[] b = new byte[16];
i.read(b, 0, b.length);
System.out.println(new String(b));

} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}

程序的输出是:

/etc:
adduser.co

当然,当我从 shell 运行时,它会按预期工作:

poundifdef@parker:~/rabbit_test$ ls /etc | grep release
lsb-release

互联网告诉我,由于管道行为不是跨平台的,在生产 Java 的 Java 工厂工作的聪明人不能保证管道工作。

我该怎么做?

我不会使用 Java 结构而不是 grepsed 来完成我所有的解析,因为如果我想改变语言,我将被迫用那种语言重写我的解析代码,这是完全不行的。

如何让 Java 在调用 shell 命令时进行管道和重定向?

最佳答案

编写脚本,然后执行脚本而不是单独的命令。

管道是外壳的一部分,所以你也可以这样做:

String[] cmd = {
"/bin/sh",
"-c",
"ls /etc | grep release"
};

Process p = Runtime.getRuntime().exec(cmd);

关于java - 如何使管道与 Runtime.exec() 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37005359/

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