控制应用程序 (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
。
当我在我的应用程序中使用 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
。