Iya. Ada beberapa cara:
Sebuah. Gunakan %x
atau '``:
%x(echo hi) #=> "hi\n"
%x(echo hi >&2) #=> "" (prints 'hi' to stderr)
`echo hi` #=> "hi\n"
`echo hi >&2` #=> "" (prints 'hi' to stderr)
Metode ini akan mengembalikan stdout, dan mengarahkan stderr ke program.
b. Penggunaan system
:
system 'echo hi' #=> true (prints 'hi')
system 'echo hi >&2' #=> true (prints 'hi' to stderr)
system 'exit 1' #=> nil
Metode ini kembali true
jika perintah berhasil. Ini mengarahkan semua output ke program.
c. Penggunaan exec
:
fork { exec 'sleep 60' } # you see a new process in top, "sleep", but no extra ruby process.
exec 'echo hi' # prints 'hi'
# the code will never get here.
Itu menggantikan proses saat ini dengan yang dibuat oleh perintah.
d. (ruby 1.9) gunakan spawn
:
spawn 'sleep 1; echo one' #=> 430
spawn 'echo two' #=> 431
sleep 2
# This program will print "two\none".
Metode ini tidak menunggu proses untuk keluar dan mengembalikan PID.
e. Penggunaan IO.popen
:
io = IO.popen 'cat', 'r+'
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close
# prints '"h"'.
Metode ini akan mengembalikan IO
objek yang merepresentasikan input / output proses baru. Saat ini juga satu-satunya cara yang saya tahu untuk memberikan masukan program.
f. Gunakan Open3
(pada 1.9.2 dan yang lebih baru)
require 'open3'
stdout,stderr,status = Open3.capture3(some_command)
STDERR.puts stderr
if status.successful?
puts stdout
else
STDERR.puts "OH NO!"
end
Open3
memiliki beberapa fungsi lain untuk mendapatkan akses eksplisit ke dua aliran keluaran. Ini mirip dengan popen, tetapi memberi Anda akses ke stderr.