Bazując na wszystkich moich odczytach w Internecie, zwracana jest różnica między backtick
i system
. backtick
zwraca STDOUT, gdy system
zwraca true
lub false
.backtick vs system ruby
Powiedziano mi, że obydwaj używają podpowłok do wykonania operacji.
Jednak dostrzegam kolejną różnicę.
output = system('aaa')
puts "output is: #{output}"
output = `aaa`
puts "output is: #{output}"
Wynik powyższego kodu jest
$ ruby test.rb
output is:
lab.rb:4:in ``': No such file or directory - aaa (Errno::ENOENT) from test.rb:4:in `<main>'
Więc wydaje się, że w przypadku backtick
wyjątki są podniesione do programu głównego. Operacja system
przełyka wyjątek, a program główny nigdy nie widzi wyjątku.
Używam ruby 1.9.3.
Czy moja analiza jest właściwa?
AKTUALIZACJA: Otrzymałem odpowiedź. Jest tutaj https://gist.github.com/3730986.
Spójrz na [5 sposobów, aby wykonywać polecenia z Ruby] (http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/); wyjaśnia specyfikę każdego ze sposobów uruchamiania polecenia uniksowego z ruby. –
@PrakashMurthy Przyjrzałem się, zanim zadałem pytanie. Ten artykuł nic nie mówi o tym, że wyjątki są zgłaszane do programu głównego, czy też nie. Dziękuję Ci. –
[Executing Commands in Ruby] (http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html) to fajny artykuł, który mówi o obsłudze wyjątków. –