有没有办法在
Ruby脚本中捕获“命令未找到”错误?例如,给定:
output = `foo`
如何捕获未安装foo的情况?我预计我可以解救一个异常,但这似乎不适用于1.8.7.是否有一种不同的方式来调用子进程来执行我想要的操作?还是有不同的方法?
更新
我很抱歉,我忘了提到一个隐藏的要求:我希望解释器不会将命令行泄漏给用户(它可能包含敏感数据),因此首选异常捕获方法.再次道歉,第一次离开这个.
解决方法
使用返回码!
irb(main):001:0> `date` => "Mo 24. Jan 16:07:15 CET 2011\n" irb(main):002:0> $? => #<Process::Status: pid=11556,exited(0)> irb(main):003:0> $?.to_i => 0 irb(main):004:0> `foo` (irb):4: command not found: foo => "" irb(main):005:0> $?.to_i => 32512
http://corelib.rubyonrails.org/classes/Process/Status.html
将STDERR重定向到STDOUT将为输出提供返回值,而不是将其膨胀:
irb(main):010:0> `foo 2>&1` => "sh: foo: not found\n" irb(main):011:0> $?.to_i => 32512