2015-01-31 50 views
0

當我在我的應用程序中使用exec從Ruby調用sox時,命令提示符不會讓我返回到我的應用程序,直到所選文件完成播放。控制應用程序(sox)

如果我使用IO.popen,一旦我啓動它,我就失去了控制過程。

我試圖與pipe運行過程中,但結果到一個文件,使用下面的命令控制返回到Ruby:

play '01\ -\ Planet\ Telex.mp3' > results.txt 2>&1 & 

紅襪使用「我現在是一個後臺進程」命令暫停自己,所以只要上面的命令運行,播放暫停。

也許解決方案是從Ruby產生一個不同的shell並運行其中的進程。有沒有人有更好的想法?

回答

0

我不確定「流程的鬆散控制」是什麼意思,因爲IO.popen應該按照您的要求進行:產生子流程並讓您訪問輸入/輸出。

下面是用它來發送輸入sed,然後讀取結果的例子:

IO.popen(["sed", "-e", "s/^/foo/"], "r+") do |f| 
    f.puts "bar" 
    f.close_write 
    puts f.gets 
end 
# foobar 

如果你想單獨的輸出/錯誤流,你可以使用popen3

+0

謝謝親切的先生! :) – user284377 2015-02-01 18:43:27

+0

好吧,那很好,但是,當我進入這個'do'循環時,我可以繼續其他操作。我相信這已成爲更多關於軟件設計架構的問題。 – user284377 2015-02-01 19:22:30

+0

這就是[線程](http://ruby-doc.org/core-2.2.0/Thread.html)的用途。 – Max 2015-02-01 22:17:51

相關問題