有没有办法在 Ruby 脚本中捕获“找不到命令”错误?例如,给定:
output = `foo`
如何捕获foo
未安装的情况?我希望我可以rescue
例外,但这似乎不适用于 1.8.7。有没有不同的方式来调用子进程来做我想做的事?还是有不同的方法?
更新
抱歉,我忘了提一个隐藏的要求:我希望解释器不会将命令行泄漏给用户(它可以包含敏感数据),因此为什么首选异常捕获方法。再次为第一次忽略这个而道歉。
有没有办法在 Ruby 脚本中捕获“找不到命令”错误?例如,给定:
output = `foo`
如何捕获foo
未安装的情况?我希望我可以rescue
例外,但这似乎不适用于 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