运行 几个 'exec' 在一个 ruby 循环中

Running several 'exec' in a ruby loop

我正在扫描文件夹中的音频文件并将其转换为 mp3。 在 RUBY 中表现出色。 但是,一旦完成第一次转码,它就会停止整个循环

这是我的代码过程的细目。

def scanFolder
  # lots of code above to get folder list, check for incorrect files etc..
  audioFileList.each {
    |getFile|

    exec_command = "ffmpeg #{getFile} #{newFileName}"
    exec exec_command
  }
end

发生的事情是它正在对找到的第一个文件进行转码,然后停止整个功能。有没有办法强制它继续?

ffmpeg 运行 并且目前正确完成,所以它没有破坏任何东西

exec 用给定的命令 运行 替换当前进程。示例:

2.0.0-p598 :001 > exec 'echo "hello"'
hello
shivam@bluegene:$

您可以看到 exec 如何用系统 echo 替换 irb 然后自动退出。

因此请尝试使用 system。这里使用 system:

的相同示例
2.0.0-p598 :003 >   system 'echo "hello"'
hello
 => true 
2.0.0-p598 :004 > 

你可以看到我还在irb,执行命令后并没有退出。

这使得您的代码如下:

def scanFolder
  # lots of code above to get folder list, check for incorrect files etc..
  audioFileList.each {
    |getFile|

    exec_command = "ffmpeg #{getFile} #{newFileName}"
    system exec_command
  }
end

连同 shivam 关于使用 system 的回答,spawn 方法在这里也可能有用:

http://ruby-doc.org//core-2.1.5/Process.html#method-c-spawn