2012-06-06 17 views
10

Làm cách nào để ẩn kết quả khỏi lệnh hệ thống trong ruby? Ví dụ: một số tập lệnh của tôi chạykết quả lệnh hệ thống ẩn trong ruby ​​

system "curl ..." 

và tôi không muốn xem kết quả tải xuống.

Cảm ơn!

+3

Lưu ý rằng curl đã có một 'chế độ --silent' bạn có thể sử dụng. – Phrogz

+0

Đó chính xác là những gì tôi cần. Cảm ơn! – dejay

+0

có thể trùng lặp của [Ngăn chặn đầu ra của lệnh chạy bằng phương pháp 'hệ thống' trong khi chạy nó trong tập lệnh ruby] (http://stackoverflow.com/questions/1960838/suppressing-the-output-of-a-command- run-using-system-method-while-running-it-i) –

Trả lời

8

Bạn có thể sử dụng phức tạp hơn popen3 để có thể kiểm soát STDIN, STDOUT và stderr riêng nếu bạn thích:

Open3.popen3("curl...") do |stdin, stdout, stderr, thread| 
    # ... 
end 

Nếu bạn muốn im lặng một số con suối, bạn có thể bỏ qua chúng, hoặc nếu điều quan trọng là để chuyển hướng hoặc giải thích đầu ra đó, bạn vẫn có sẵn.

+3

Bạn có thể cần phải "yêu cầu" open3 '". Sử dụng "myvarname = stdin.read" nếu bạn muốn xử lý đầu ra. – DanielaWaranie

+0

Để sử dụng các kết quả đầu ra nâng cao như stdin, stderr v.v. thì không sao, nhưng chỉ để có được kết quả đầu ra của bảng điều khiển, đó là một phụ thuộc có thể được loại bỏ bằng ví dụ: '% x {bash-command arg1 arg2}' – siegy22

+0

@RaVeN Một ưu điểm của 'popen3' hoặc' system' là bạn có thể phá vỡ các đối số đúng cách: 'system (" example "," --file ", user_supplied_filename)' an toàn từ vỏ tiêm. 'system (" example --file # {user_supplied_filename} ")' là ** cực kỳ nguy hiểm ** và không nên thực hiện. – tadman

2

Đơn giản nhất là để chuyển hướng stdout :)

system "curl ... 1>/dev/null" 
# same as 
`curl ... 1>/dev/null` 
5

cách dễ nhất khác hơn popen:

  1. Sử dụng% x thay vì hệ thống. Nó sẽ tự động đường ống

    rval = %x{curl ...}  #rval will contain the output instead of function return value 
    
  2. Thủ công ống tới/dev/null. Làm việc trong UNIX như hệ thống, không phải Windows

    system "curl ... > /dev/null"