[英]STDOUT does not work programmatically via Groovy API
使用espeak
命令生成音頻
espeak "Hello Mr. Toumi" --stdout > /tmp/audio123.wav
當我使用終端運行此命令時,它工作正常。
現在在API中為Grails Service中的此命令做准備
#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')
,沒有文件生成,也沒有錯誤消息顯示。 任何想法:為什么它不能以編程方式工作?
像>
這樣的重定向是由Shell完成的。 要么使用['sh', '-c', 'espeak ...'].execute()
。 或者只是從該過程中獲取stdout
,這將使您不必處理文件。 例如
def p = "echo -n 666".execute()
p.waitFor()
assert p.in instanceof InputStream
assert p.in.text == "666"
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.