使用espeak
命令生成音频
espeak "Hello Mr. Toumi" --stdout > /tmp/audio123.wav
当我使用终端运行这个命令时,它工作正常。
现在在 API 中为 Grails 服务中的这个命令准备
#EspeakService.groovy
File speak(String message){
Process pr='espeak "'+message+'" --stdout > '+filePath(message);
pr.waitFor()
return new File(filePath(message));
}
当我运行:espeakService.speak('Hello Mr. Toumi')
时,没有生成文件,也没有显示错误消息。
任何想法:为什么它不能以编程方式工作?
最佳答案
Java 的外部进程执行机制不是shell,也不支持像那样使用>
进行重定向。您应该使用 ProcessBuilder 并使用它进行重定向:
ProcessBuilder pb = new ProcessBuilder("espeak", message, "--stdout")
File out = new File(filePath(message))
pb.redirectOutput(out)
pb.redirectError(ProcessBuilder.Redirect.INHERIT)
pb.start().waitFor()
return out
关于linux - STDOUT 不能通过 Groovy API 以编程方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28299151/