Tak. Jest kilka sposobów:
za. Użyj %xlub '' ':
%x(echo hi)
%x(echo hi >&2)
`echo hi`
`echo hi >&2`
Te metody zwrócą standardowe wyjście i przekierują stderr do programu.
b. Zastosowanie system:
system 'echo hi'
system 'echo hi >&2'
system 'exit 1'
Ta metoda zwraca, truejeśli polecenie zakończyło się pomyślnie. Przekierowuje wszystkie dane wyjściowe do programu.
do. Zastosowanie exec:
fork { exec 'sleep 60' }
exec 'echo hi'
To zastępuje bieżący proces tym utworzonym przez polecenie.
re. (rubin 1.9) użyj spawn:
spawn 'sleep 1; echo one'
spawn 'echo two'
sleep 2
Ta metoda nie czeka na zakończenie procesu i zwraca PID.
mi. Zastosowanie IO.popen:
io = IO.popen 'cat', 'r+'
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close
Ta metoda zwróci IOobiekt, który reprezentuje wejście / wyjście nowego procesu. Jest to również obecnie jedyny znany mi sposób przekazywania danych wejściowych do programu.
fa. Użyj Open3(w wersji 1.9.2 i nowszych)
require 'open3'
stdout,stderr,status = Open3.capture3(some_command)
STDERR.puts stderr
if status.successful?
puts stdout
else
STDERR.puts "OH NO!"
end
Open3ma kilka innych funkcji do uzyskiwania jawnego dostępu do dwóch strumieni wyjściowych. Jest podobny do popen, ale daje dostęp do stderr.