2015-01-31 51 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

相关问题