2012-10-19 16 views
5

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.

+3

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. –

+0

@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. –

+1

[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. –

Odpowiedz