2012-10-19 12 views
5

Web üzerindeki tüm okumalarımda backtick ve system arasındaki fark iade edildi. backtick STDOUT değerini döndürürken system, true veya false'u döndürür.backtick vs ruby'deki sistem

Ve her ikisinin de operasyonu gerçekleştirmek için subshell kullandıkları söylendi. Ancak başka bir fark olduğunu farkettim. Yukarıdaki kod

output = system('aaa') 
puts "output is: #{output}" 

output = `aaa` 
puts "output is: #{output}" 

Sonucu

$ ruby test.rb 
output is: 
lab.rb:4:in ``': No such file or directory - aaa (Errno::ENOENT) from test.rb:4:in `<main>' 

yüzden istisnalar ana programa yetiştirilir backtick durumunda görünüyor olduğunu. Operasyon system istisnayı yutar ve ana program hiçbir zaman istisnayı görmez.

Ruby 1.9.3 kullanıyorum.

Analizim doğru mu?

GÜNCELLEME: Cevabı aldım. Burada https://gist.github.com/3730986 var. "Cevapsız" filtresinden bu soruyu kaldırmak amacıyla düzenlenmiş soru vücuttan cevabını kopyalanması

+3

başına cevap [Ruby komutları çalıştırmak için 5 yollardan] (http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/) bir göz atın; Ruby'den bir unix komutu çalıştırma yollarının her birinin özelliklerini açıklar. –

+0

@PrakashMurthy Soruyu sormadan önce baktım. Bu makalede istisnalar hakkında bir şey söylenmez, ana programa yükseltilir veya verilmez. Teşekkür ederim. –

+1

[Ruby'deki Komutları Çalıştırma] (http://blog.bigbinary.com/2012/10/18/backtick-system-exec-in-ruby.html), istisna işleme hakkında konuşulan güzel bir makaledir. –

cevap