gpt4 book ai didi

java - 运行多个系统命令

转载 作者:行者123 更新时间:2023-11-30 10:37:29 24 4
gpt4 key购买 nike

我已经使用 java 进程玩了一段时间,但卡住了。我想要做的是同时运行多个系统命令并将它们的输出打印到控制台。

例如,ls -l ;猫一些文件;辞职 ; grep foo someOtherFile 应该同时运行。我在某处读到这些命令的输出应该混合在一起。另外,如果字符串中有quit命令,则继续执行其他命令,然后退出。

现在,它们正在按顺序执行。如何同时运行它们并在输出到达时打印它们。

String st = "ls -l ; cat someFile ; quit ; grep foo someOtherFile";

String[] rows = st.split(";");

String[][] strArray = new String[rows.length][];
int index = 0;
for(int i = 0; i < rows.length; i++) {
rows[index] = rows[index].trim();
strArray[index] = rows[index].split(" ");
index++;
}
for(int i = 0; i < strArray.length; i++) {
if(rows[i].equalsIgnoreCase("quit")) {
System.out.println("Abort");
break;
}
if(rows[i].equals("")) {
continue;
}
ProcessBuilder pb = new ProcessBuilder(strArray[i]);
pb.redirectErrorStream(true);
Process process = pb.start();

InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String line;
while ( (line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}

最佳答案

只需将循环的内容放入新线程的 run() 函数中,循环的每次迭代都将在单独的线程中运行:

new Thread() {
public void run() {
// loop guts go here
}
}.start();

您可能必须将一些变量声明为 final 才能在这个匿名内部类中访问它们。

关于java - 运行多个系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40092178/

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