控制应用程序 (sox)

Controlling applications (sox)

当我在我的应用程序中使用 exec 从 Ruby 调用 sox 时,命令提示符不允许我 return 到我的应用程序,直到所选文件播放完毕。

如果我使用 IO.popen,一旦我启动它,我就失去了对该过程的控制。

我试图 运行 使用 pipe 的过程,但结果到文件和 return 控制到 Ruby 使用以下命令:

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

Sox 使用 "I'm now a background process" 命令暂停自身,因此一旦上面的命令 运行s,播放就会停止。

也许解决方案是从 Ruby 生成一个不同的 shell 并在其中运行进程。有没有人有更好的主意?

我不确定你所说的 "loose control of the process" 是什么意思,因为 IO.popen 应该完全按照你的意愿去做:生成一个子进程并让你访问 input/output.

下面是一个使用它将输入发送到 sed 然后读取结果的示例:

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

如果您想要单独的 output/error 流,您可以使用 popen3