【问题标题】:Running several 'exec' in a ruby loop在 ruby​​ 循环中运行多个“exec”
【发布时间】:2015-03-02 08:45:47
【问题描述】:

我正在扫描文件夹中的音频文件并将它们转换为 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 目前确实运行并正确完成,所以它不会破坏任何东西

【问题讨论】:

    标签: ruby ffmpeg exec


    【解决方案1】:

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

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

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

    因此尝试改用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
    

    【讨论】:

      【解决方案2】:

      除了 shivam 关于使用 system 的回答之外,spawn 方法在这里也可能有用:

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

      【讨论】:

        猜你喜欢
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多