gpt4 book ai didi

java - 如何通过 Runtime.getRuntime().exec() 在命令行应用程序中执行命令

转载 作者:行者123 更新时间:2023-12-02 08:53:53 26 4
gpt4 key购买 nike

我正在尝试从 Java 执行第三方命令行应用程序。该应用程序称为 CWB。我正在使用以下代码:

process = Runtime.getRuntime().exec(script.sh);

LinkedList<String> stringList = new LinkedList<String>();

BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));

String line = "";

while ((line = reader.readLine()) != null) {
stringList.add(line);
}

int exitVal = 0;

exitVal = process.waitFor();
if (exitVal == 0) {
// Success
return stringList;
} else {
// Failure
return null;
}

命令放在文件 script.sh 中(我在 Linux 中)。该脚本包含以下两个命令:

# Run CWB application from Terminal
./cwb-nc-ccs-x86-linux.bin
# Execute a CWB-specific command
load file_name.ccs

当我从终端执行 CWB 时和通过 Runtime.getRuntime().exec() 在 Java 中执行它时,行为是不同的。 。当我从终端执行 CWB 时,我获得以下输出:

CWB_output_from_terminal

但是,当我通过 Runtime.getRuntime().exec() 从 Java 执行时,我在控制台中获得以下输出:

The Concurrency Workbench of the New Century
(Version 1.2 --- June, 2000)

即Java中的shell在命令./cwb-nc-ccs-x86-linux.bin之后停止执行。我认为原因是,当我开始CWB过程时,就好像我进入了一个新的“环境”。可以注意到,因为我输入命令的光标行以 cwb-nc> 开头。 ,如上图所示。因此,在一个新的“环境”中而不是在 shell 中,Java 不知道如何将命令传递到这个环境。我对吗?如何解决这个问题并执行脚本中的其他命令( load file_name.ccs )?

最佳答案

我在 Java 应用程序中使用 Lilypond 时实际上遇到了类似的问题。我相信您关于 Java 命令如何工作的结论是准确的。它并不等同于在命令 shell 中输入,因此我们必须做一些特殊的准备才能让它执行我们想要的操作。

我必须创建一个脚本文件,然后使用执行命令,直到找到一个真正打开命令窗口并正确执行命令的脚本文件:

//Run the script
String command = "cmd.exe /C \"C:/Users/Lindsay Gen10/Documents/NetBeansProjects/capstone/src/main/resources/templates/pdfs/"
+ song.getTitle().replaceAll(" ", "") + "Script.sh\"";
Runtime.getRuntime().exec("cmd /c run cmd.exe /K ");
Process p = Runtime.getRuntime().exec(command);
p.waitFor();

通过使用cmd/c run,它实际上强制打开命令窗口。我不能 100% 确定这也能解决您的问题,但值得一试!

关于java - 如何通过 Runtime.getRuntime().exec() 在命令行应用程序中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60606718/

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