如何捕获命令的输出而不显示在stdout中

时间:2016-12-22 01:52:07

标签: ruby git stdout ruby-2.3.1

如何在没有stdout中显示的命令的情况下捕获命令的输出并检查它的内容?例如:

union

如何捕获此输出以检查命令是否显示 def update! `git pull origin master` if $?.exitstatus > 0 puts 'Failed to update' elsif $?.success? puts 'Upgraded successfully' else puts 'Already up to date' end end ,发生错误或成功更新?有没有办法将输出写入文件而不是控制台?

答案更新:

up-to date

此输出始终为:

def update!
  update_status = `git pull origin master 2>&1`
  if $?.exitstatus > 0
    puts 'error'
  elsif update_status =~ /Already up-to date/
    puts 'same version as origin master'
  else
    puts 'updated'
  end
end

即使版本与原点相同。如果可能,我想做的是将命令的[06:44:29 INFO] Updating to newest version.. updated 保存到文件中并从该文件中读取以发现程序是否已更新。我认为这是最简单的方法。

1 个答案:

答案 0 :(得分:1)

您可以将命令的输出分配给字符串。

使用2>&1将stderr重定向到stdout,从而捕获所有输出。

str = `git pull origin master 2>&1`
if $?.exitstatus > 0
  ...
elsif str =~ /up-to-date/
  ...
else
  ...
end