2017-10-04 13 views
0

나는 루비에서 다음 코드를 실행해야합니다 :이 명령을 실행하면루비에서 wget 출력을 얻으려면 어떻게해야합니까?

system "wget http://example.org/some/large/archive.zip" 

내가 '은 wget-로그'로 출력을 재 지정

참조하십시오.

은 내가 루비 프로세스를 실행하는 경우

가 어떻게 터미널에서 wget과 출력을 볼 수 있습니다 진행 상황을 볼 수 tail -f wget-log을 할 필요가?

나는

system "wget -O - http://example.org/some/large/archive.zip > dev/null" 

을 시도했지만 그것은

아마 루비 대형 아카이브를 다운로드하고 진행 상황을 볼 수있는 다른 옵션이

도움이되지 않았다?

답변

1

Ruby의 표준 라이브러리에있는 Open3 모듈을 사용할 수 있습니다.

은 다른 프로그램을 실행할 때 자식 프로세스를 기다리는 stdout, stderr, 종료 코드 및 스레드에 대한 액세스 권한을 부여합니다..

그래서, 당신이 뭔가를 할 수있는 pwd 명령을 갖는

require 'open3' 
stdout, stderr, status = Open3.capture3('pwd') 
puts stdout # ~/ current directory 
puts stderr # no error 
puts status # pid 25522 exit 0 
+0

와'Open3.capture3' 나를 위해 wget을 작동하지 않았다. 'Open3.capture2 ('wget http://example.org/some/large/archive.zip')와 함께 작동했습니다. – Hirurg103

+0

네, 약간 다릅니다. –

0

루비 내장 libs와 당신이 net/http를 사용할 수있는 파일을 다운로드 예 : http 것들의 어떤 종류를 만들기 위해 좋은를 제공합니다 : 당신의 루비 코드에서 HTTP 오류의 종류를 잡기 wget당신없는

require 'net/http' 
require 'uri' 

uri = URI(URI.encode("http://example.org/some/large/archive.zip")) 
Net::HTTP.start(uri.host,uri.port) do |http| 
    request = Net::HTTP::Get.new uri.path 

    http.request request do |response| 
    open "/tmp/my_large_file.zip", 'w' do |io| 
     response.read_body do |chunk| 
     puts "Writing #{chunk.length} bits ..." # see progress 
     io.write chunk 
     end 
    end 
    end 
end 

. *

당신이 수없는 인증, 귀하의 루비 코드의 예를 들어 기본을 만드는와3210

. *

사용 루비 내장 libs와, 매우 강력한 것입니다.

당신은 할 수 있지만, 일부 버그 코드