簡體   English   中英

STDOUT無法通過Groovy API以編程方式工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM