2015-05-29 111 views
0

我有簡單的Ruby腳本:重定向外殼輸出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標準輸入)

注:我不想使用本機外殼重定向像「>輸出。 txt 2> error.txt',因爲我想獲得ffmpeg進程的pid,而不是shell進程並在將來殺死它。

+0

? – lcguida

+0

ruby​​ 2.0.0p598(2014-11-13 revision 48408)[x86_64-darwin14.1.0] – rs41

回答

0

的問題得到了解決 - FFMPEG您使用它的紅寶石版本的所有輸出重定向到STDERR

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") 
+0

STDOUT,STDERR和:err,:out是spawn選項中的別名。我嘗試過:err,:out,它的工作原理,如上面所述。 – rs41