我可以在Ruby中显示系统调用的日志吗?

时间:2014-07-21 07:30:46

标签: ruby-on-rails ruby shell sinatra

我需要调用一个命令(在sinatra或rails app中),如下所示:

`command sub`

执行命令时,某些日志将被输出。 我希望在此过程中看到日志不断显示。

但是我可以在完成后获取日志字符串:

result = `command sub`

那么,有没有办法实现这个?

2 个答案:

答案 0 :(得分:1)

在Windows上,我拥有IO.popen

的最佳体验

这是一个示例

require 'logger'

$log = Logger.new( "#{__FILE__}.log", 'monthly' )
#here comes the full command line, here it is a java program
command = %Q{java -jar getscreen.jar #{$userid} #{$password}}
$log.debug command
STDOUT.sync = true
begin
  # Note the somewhat strange 2> syntax. This denotes the file descriptor to pipe to a file. By convention, 0 is stdin, 1 is stdout, 2 is stderr.
  IO.popen(command+" 2>&1") do |pipe|
    pipe.sync = true
    while str = pipe.gets #for every line the external program returns
      #do somerthing with the capturted line
    end
  end
rescue => e
  $log.error "#{__LINE__}:#{e}"
  $log.error e.backtrace
end

答案 1 :(得分:0)

有六种方法可以做到这一点,但你使用的方式并不正确,因为它会等待回程过程。

从这里选择一个:

http://tech.natemurray.com/2007/03/ruby-shell-commands.html

如果我是你,我会使用IO#popen3