2016-12-22 2 views
2

Как я могу захватить вывод команды и проверить, что она говорит, без отображения команды в stdout? Например:Как захватить вывод команды без ее отображения в stdout

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 

Даже если версия такая же, как происхождение. Что бы я хотел сделать, если это возможно, это сохранить команду stdout команды в файл и прочитать из этого файла, чтобы узнать, была ли программа обновлена ​​или нет. Я думаю, что это будет самый простой способ сделать это.

+0

Вы хотите написать тесты для своего метода? –

+0

@ sagarpandya82 Нет, я пытаюсь получить метод обновления для программы, которую я написал, и хочу захватить вывод самого git. Я просто не знаю, можно ли записать вывод в файл или нет. – User9123

ответ

1

Вы можете назначить вывод команды строке.

Используйте 2>&1 для перенаправления stderr на stdout и, таким образом, захватите все выходные данные.

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

Это не сработает, когда 'git' уже обновлен, он выйдет со статусом 0, поэтому' else' бесполезен – User9123

+0

Мне нужно как-то захватить информацию и проверить, говорит ли она «обновить», «обновить» или какую-то ошибку – User9123

+0

Gotcha, обновление! – akuhn

Смежные вопросы