从Rails中的命令行读取

时间:2012-01-17 22:01:19

标签: ruby-on-rails session shell

我正在尝试使用session在rails中运行以下mplayer命令:

mplayer -identify -vo null -ao null -frames 0 text.mov

我使用require“session”,以下代码在单个ruby文件中运行良好。

mb = "mplayer"
    mi = "-identify -vo null -ao null -frames 0"
    dimensions_bitrate = Hash.new

    stdout, stderr = '', ''
    shell = Session::Shell.new
    shell.execute "#{mb} #{mi} #{filename}", :stdout => stdout, :stderr => stderr

    vars = (stdout.split(/\n/).collect! { |o| o if o =~ /^ID_/ } ).compact!

    vars.each { |v|
            a, b = v.split("=")
            eval "@#{a.to_s.downcase} = \"#{b}\""       
            if a == "ID_VIDEO_WIDTH"
                    dimensions_bitrate[0] = b.to_i
            elsif a == "ID_VIDEO_HEIGHT"
                    dimensions_bitrate[1] = b.to_i
            elsif a == "ID_VIDEO_BITRATE"
                    dimensions_bitrate[2] = b.to_i
            end
    }

但是,我无法将会话gem加载到ROR中。我不确定问题是什么。如果我添加require“session”,我会收到以下错误:

no such file to load -- session

我认为我错过了相对简单的事情。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我无法让它工作,所以我做了以下事情:

stdout = %x["mplayer" "-identify" "-vo" "-ao" "null" "-frames" "0" "#{filename}"]
    vars = (stdout.split(/\n/).collect! { |o| o if o =~ /^ID_/ } ).compact!
    vars.each { |v|
            a, b = v.split("=")
            eval "@#{a.to_s.downcase} = \"#{b}\""       
            if a == "ID_VIDEO_WIDTH"
                    dimensions_bitrate[0] = b.to_i
            elsif a == "ID_VIDEO_HEIGHT"
                    dimensions_bitrate[1] = b.to_i
            elsif a == "ID_VIDEO_BITRATE"
                    dimensions_bitrate[2] = b.to_i
            end
    }

并且效果很好。希望这对从ROR运行命令行的人有用。关键是将每个参数设置为字符串。