Câu hỏi Làm thế nào một lệnh ngoài có thể trả về cả đầu ra của nó và trạng thái thoát của nó sang Ruby?


Đây là câu hỏi tiếp theo liên quan đến lệnh hệ thống ruby ​​kiểm tra mã thoát. Tôi muốn chạy lệnh như vậy để có được đầu ra của nó cũng như mã thoát. Hiện tại những gì tôi đã sử dụng trong mã là:

rv = `#{cmd} 2>&1`

Nhưng điều này chỉ bắt đầu ra, và

rv = system(cmd)

chỉ chụp mã thoát. Làm thế nào để đạt được cả hai?


7
2018-01-23 01:27


gốc




Các câu trả lời:


Kiểm tra $?.exitstatus cho mã thoát.

Để biết thêm thông tin, hãy xem http://www.ruby-doc.org/core-2.1.0/Process/Status.html


6
2018-01-23 01:34





Backticks sẽ nắm bắt đầu ra từ lệnh của bạn. Ví dụ, để lưu trữ đầu ra trong rv biến:

rv = `echo Error: EX_USAGE; exit 64`
#=> "Error: EX_USAGE\n"

Bạn có thể thẩm vấn trạng thái thoát của quá trình từ tích hợp sẵn $? biến hoặc từ một Trạng thái đang diễn ra vật. Ví dụ, để có được trạng thái thoát của lệnh backtick cuối cùng:

$?.exitstatus
#=> 64

3
2018-01-23 01:42





$? truy cập trạng thái của lệnh được thực thi cuối cùng của hệ thống nếu bạn   sử dụng backticks, system () hoặc% {}. Sau đó bạn có thể truy cập exitstatus   và các thuộc tính pid.

Nguồn

Vì vậy, bạn có thể làm rv = system(cmd), và làm status = $?.exitstatus.


1
2018-01-23 01:33