gpt4 book ai didi

java - 在 Java 中运行连续批处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:23 24 4
gpt4 key购买 nike

我有一个批处理文件,它执行收听麦克风并将其转换为文本的操作(我正在使用袖珍 sphinx )。

我用来运行批处理文件的命令是 pocketsphinx_continuous.exe -dict <dict name> -lm <language model> -hmm <acoustic model location> .批处理文件开始并继续收听麦克风。每当我们说完一个句子时,它都会在命令提示符下将其转换为文本。由于此任务持续运行,我们通过 Ctrl-C 终止此任务。

我试图将它变成一个独立的 Java 应用程序。我想通过 Java 运行这个批处理文件,所以我使用了 Runtime.getRuntime().exec("cmd /c start pocketsphinx_continuous.exe ...")与所有参数。然而奇怪的是,它在单独的命令提示符下启动批处理过程,但立即退出。我尝试使用 process.waitfor() ,但是它只是开始执行批处理然后终止。我没有调用process.destroy ,所以我无法弄清楚为什么它会退出批处理。

另一个问题是,由于批处理文件是连续运行的,在每个口语句子被转录后,我希望在我的 Java 应用程序中得到输出。我知道我可以将批处理重定向到一个文件,然后读取该文件,只是想知道是否有更直接的过程。你能帮我弄清楚我在哪里犯了错误吗?

最佳答案

你应该使用 Process.getInputStream()Process.getErrorStream()找出它打印出的消息。

如果它立即退出,您可能需要获取退出代码 ( Process.waitFor() ) 并检查错误流中的错误日志。

此外,如果您可以发布您的一些代码,我们也许可以提供帮助。一般来说,这些问题是由于路径或命令字符串配置不正确造成的。

一个可能的解决方法是使用 ProcessBuilder因此,从 Java 1.5 开始:

// Note the lack of "cmd \c" - you shouldn't need to run it in a cmd window!
ProcessBuilder pb = new ProcessBuilder("pocketsphinx_continuous.exe",
"dict", "1121.dic",
"-lm", "1121.lm",
"-hmm", "hub4/hmm");

Process p = pb.start();

// TODO for you:
// 1. Create Threads to handle the input
// 2. Store the Process instance so that you can call p.destroy() later.
// 3. If interested, have a Thread doing p.waitFor() to get the exit code.

正如 Joachim Sauer 在评论中提到的,这个 Javaworld article解释了很多与 Process API 相关的陷阱,因此请仔细阅读。我还没有机会尝试在 JDK7 中对 Process API 所做的改进,从表面上看,Oracle 正在为 JDK8 (JEP 102) 再次改进它。

关于java - 在 Java 中运行连续批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708771/

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