2012-10-19 14 views
5

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.

+3

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

+0

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

+1

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

risposta