2016-12-22 8 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

어떻게 든 정보를 캡처하고 그것이'updated','up-date' 또는 어떤 종류의 에러라고 말 할 것인지 체크해야합니다 – User9123

+0

Gotcha, updating! – akuhn