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