重定向ruby脚本的shell输出

时间:2015-05-29 08:35:06

标签: ruby-on-rails ruby shell ffmpeg

我有简单的ruby脚本:

 #! /usr/bin/env ruby
 require 'fileutils'

 FileUtils.rm "output.mkv" if File.exists?("outp    ut.mkv")
 pid = Process.spawn("ffmpeg -i wrong_file.mp4 -c:v libx264 -preset veryslow -qp 0 output.mkv", STDOUT => "output.txt", STDERR => "error.txt")

 puts "pid : #{pid}"
 Process.wait(pid)

但是,STDOUT和STDERR输出到error.txt,为什么?

看起来,ffmpeg有另一个退出代码?(通常情况下,0表示stdout,1表示stdin)

注意:我不想使用像'>这样的原生shell重定向output.txt 2> error.txt'因为我想获得ffmpeg进程的pid,而不是shell进程并在将来杀死它。

2 个答案:

答案 0 :(得分:0)

根据spawn method documentation你应该这样做:

pid = Process.spawn("ffmpeg -i wrong_file.mp4 -c:v libx264 -preset veryslow -qp 0 output.mkv", :out => "output.txt", :err => "error.txt")

答案 1 :(得分:0)

问题已解决 - FFMPEG将所有输出重定向到STDERR

相关问题