hệ thống
Các system
phương pháp gọi là một chương trình hệ thống. Bạn phải cung cấp lệnh dưới dạng đối số chuỗi cho phương thức này. Ví dụ:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
Chương trình Viện dẫn sẽ sử dụng hiện nay STDIN
, STDOUT
và STDERR
các đối tượng của chương trình của Ruby của bạn. Trong thực tế, giá trị trả lại thực tế là true
, false
hoặc nil
. Trong ví dụ, ngày được in thông qua đối tượng IO của STDIN
. Phương thức sẽ trả về true
nếu quá trình thoát với trạng thái 0, false
nếu quá trình thoát với trạng thái khác không và nil
nếu thực thi không thành công.
Một tác dụng phụ khác là biến toàn cục $?
được đặt thành một Process::Status
đối tượng. Đối tượng này sẽ chứa thông tin về chính cuộc gọi, bao gồm cả định danh quy trình (PID) của quy trình được gọi và trạng thái thoát.
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
Backticks
Backticks (``) gọi một chương trình hệ thống và trả về đầu ra của nó. Trái ngược với cách tiếp cận đầu tiên, lệnh không được cung cấp thông qua một chuỗi, mà bằng cách đặt nó vào trong một cặp backticks.
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
Biến toàn cục $?
cũng được đặt thông qua backticks. Với backticks bạn cũng có thể sử dụng phép nội suy chuỗi.
% x ()
Sử dụng %x
là một thay thế cho phong cách backticks. Nó cũng sẽ trả lại đầu ra. Giống như người thân của nó %w
và %q
(trong số những người khác), bất kỳ dấu phân cách nào cũng sẽ đủ miễn là các dấu phân cách kiểu khung khớp với nhau. Điều này có nghĩa %x(date)
, %x{date}
và %x-date-
đều là từ đồng nghĩa. Giống như backticks %x
có thể sử dụng phép nội suy chuỗi.
thực hiện
Bằng cách sử dụng Kernel#exec
quy trình hiện tại (tập lệnh Ruby của bạn) được thay thế bằng quy trình được gọi qua exec
. Phương thức có thể lấy một chuỗi làm đối số. Trong trường hợp này, chuỗi sẽ được mở rộng shell. Khi sử dụng nhiều hơn một đối số, thì đối số đầu tiên được sử dụng để thực thi chương trình và các đối số sau được cung cấp làm đối số cho chương trình được gọi.
Open3.popen3
Đôi khi thông tin bắt buộc được ghi vào đầu vào tiêu chuẩn hoặc lỗi tiêu chuẩn và bạn cũng cần kiểm soát những thông tin đó. Ở đây Open3.popen3
có ích:
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end