linux - STDOUT 不能通过 Groovy API 以编程方式工作

标签 linux grails cmd stdout

使用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/

相关文章:

grails - 为什么 Grails 中的一些标记库返回一个闭包?

cmd - 自动生成 makecert 密码

javascript - 使用 NodeJS 执行托管 .JS 文件

powershell - 从PowerShell设置Visual Studio环境变量

asp.net - 一个用户,两个用户组,允许第一组访问,第二组拒绝访问,如何解决冲突?

unit-testing - 在grails中执行 Controller 的单元测试时,不能使用grailsApplication.getMetadata.get (“”)

c - kill 函数返回无效参数

grails - 如何计算gorm中一对多关系中出现的次数-Grails

c - Gdb 函数入口点未知

linux - 将终端提示符放在新行中,位于 <username@host-path> 之后