Tak. Jest kilka sposobów:
za. Użyj %x
lub '' ':
%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, true
jeś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 IO
obiekt, 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
Open3
ma kilka innych funkcji do uzyskiwania jawnego dostępu do dwóch strumieni wyjściowych. Jest podobny do popen, ale daje dostęp do stderr.