重定向 shell 脚本的 ruby 输出
Redirect shell output for ruby script
我有简单的 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 处理并在将来杀死它。
根据 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")
问题已解决 - FFMPEG 将所有输出重定向到 STDERR
我有简单的 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 处理并在将来杀死它。
根据 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")
问题已解决 - FFMPEG 将所有输出重定向到 STDERR