Evet. Birkaç yol var:
a. %x
Veya '' ' kullanın :
%x(echo hi)
%x(echo hi >&2)
`echo hi`
`echo hi >&2`
Bu yöntemler stdout'u döndürür ve stderr'i programınkine yönlendirir.
b. Kullanım system
:
system 'echo hi'
system 'echo hi >&2'
system 'exit 1'
true
Komut başarılı olursa bu yöntem geri döner . Tüm çıktıları programa yönlendirir.
c. Kullanım exec
:
fork { exec 'sleep 60' }
exec 'echo hi'
Bu, mevcut işlemi komut tarafından oluşturulanla değiştirir.
d. (yakut 1.9) kullanım spawn
:
spawn 'sleep 1; echo one'
spawn 'echo two'
sleep 2
Bu yöntem, işlemin çıkmasını beklemez ve PID'yi döndürür.
e. Kullanım IO.popen
:
io = IO.popen 'cat', 'r+'
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close
Bu yöntem IO
, yeni işlemlerin girdisini / çıktısını yeniden yorumlayan bir nesne döndürür . Ayrıca şu anda programa girdi vermenin bildiğim tek yolu bu.
f. Kullanım Open3
(1.9.2 ve sonrasında)
require 'open3'
stdout,stderr,status = Open3.capture3(some_command)
STDERR.puts stderr
if status.successful?
puts stdout
else
STDERR.puts "OH NO!"
end
Open3
iki çıktı akışına açık erişim elde etmek için birkaç başka işleve sahiptir. Popen'e benzer, ancak size stderr'e erişim sağlar.