使用Processbuilder如何按顺序执行命令

3
我希望使用Java Process Builder在Windows操作系统中执行两个命令(一个是批处理文件,另一个是Python脚本),但不幸的是无法实现。我尝试了许多方法。
List<String> commands = new ArrayList<String>();
                commands.add("Testbatch.bat");
                commands.add("Python.exe");
                commands.add("TestPythonScript.py");
                ProcessBuilder probuilder = new ProcessBuilder(commands);
                Process process = probuilder.start();

这里执行的是批处理文件,而不是Python。在此过程中,进程构建器将命令视为参数,除了第一个命令之外。也尝试了以下方法,但没有成功。
String [] commands={"CMD","/C","Testbatch.bat","Python.exe","TestPythonScript.py"};
ProcessBuilder probuilder = new ProcessBuilder(commands);
Process process = probuilder.start();

我希望能够使用ProcessBuilder按顺序(一个接一个)执行命令,但是尝试了很多方法都不起作用,已经花费了三天时间,但无法找到正确的方法。请问有没有人能够建议我实现这个功能的方法。

谢谢,

Sudheer

1个回答

6

ProcessBuilder 只能一次执行一个命令 -- 正如您所发现的那样,当您传递一个字符串数组时,只有第一个字符串被视为命令,其余字符串被用作参数。

要执行多个命令,您需要为每个命令创建一个新的 ProcessBuilder

为了确保多个命令按顺序运行,您需要在开始下一个命令之前确保一个命令完成,否则执行顺序将是不确定的。

您可以通过获取由 ProcessBuilder.start() 返回的 Process 对象,并使用其 waitFor() 方法等待每个命令完成来实现这一点。


Sudheer,如果kshetline的回答对你解决了问题,请务必接受他们的答案。 - undefined
@Kshetline非常感谢!解释得很好,你的答案解决了我的问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接