在Ruby循环中运行几个“ exec”

Bee*_*tic 2 ruby ffmpeg exec

我正在扫描文件夹中的音频文件,并将它们转换为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
Run Code Online (Sandbox Code Playgroud)

发生的事情是,它将对找到的第一个文件进行代码转换,然后停止整个功能。有办法强迫它继续吗?

ffmpeg目前确实可以正常运行并完成,因此它没有破坏任何内容

shi*_*vam 5

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

2.0.0-p598 :001 > exec 'echo "hello"'
hello
shivam@bluegene:$
Run Code Online (Sandbox Code Playgroud)

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

因此,请尝试使用系统代替。这里使用相同的示例system

2.0.0-p598 :003 >   system 'echo "hello"'
hello
 => true 
2.0.0-p598 :004 > 
Run Code Online (Sandbox Code Playgroud)

您可以看到我仍然在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
Run Code Online (Sandbox Code Playgroud)