Base su tutte le mie letture sul web la differenza tra backtick
e system
è ciò che viene restituito. backtick
restituisce STDOUT mentre system
restituisce true
o false
.backtick vs system in ruby
E mi è stato detto che entrambi usano la subshell per eseguire l'operazione.
Tuttavia, noto un'altra differenza.
output = system('aaa')
puts "output is: #{output}"
output = `aaa`
puts "output is: #{output}"
Risultato di codice di cui sopra è
$ ruby test.rb
output is:
lab.rb:4:in ``': No such file or directory - aaa (Errno::ENOENT) from test.rb:4:in `<main>'
così sembra, nel caso di backtick
le eccezioni vengono sollevate al programma principale. L'operazione system
ingoia l'eccezione e il programma principale non vede mai l'eccezione.
Sto usando Ruby 1.9.3.
La mia analisi è corretta?
AGGIORNAMENTO: ho la risposta. È qui https://gist.github.com/3730986.
Date un'occhiata a [5 modi per eseguire comandi da Ruby] (http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/); spiega le specifiche di ciascuno dei modi per eseguire un comando unix da ruby. –
@PrakashMurthy Ho guardato prima di fare la domanda. Quell'articolo non dice nulla riguardo alle eccezioni che si presentano al programma principale o no. Grazie. –
[Esecuzione comandi in Ruby] (http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html) è un bell'articolo che parla della gestione delle eccezioni. –