加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从Ruby的反引号中捕获“命令未找到”错误?

发布时间:2020-12-17 04:30:30 所属栏目:百科 来源:网络整理
导读:有没有办法在 Ruby脚本中捕获“命令未找到”错误?例如,给定: output = `foo` 如何捕获未安装foo的情况?我预计我可以解救一个异常,但这似乎不适用于1.8.7.是否有一种不同的方式来调用子进程来执行我想要的操作?还是有不同的方法? 更新 我很抱歉,我忘了提
有没有办法在 Ruby脚本中捕获“命令未找到”错误?例如,给定:
output = `foo`

如何捕获未安装foo的情况?我预计我可以解救一个异常,但这似乎不适用于1.8.7.是否有一种不同的方式来调用子进程来执行我想要的操作?还是有不同的方法?

更新

我很抱歉,我忘了提到一个隐藏的要求:我希望解释器不会将命令行泄漏给用户(它可能包含敏感数据),因此首选异常捕获方法.再次道歉,第一次离开这个.

解决方法

使用返回码!
irb(main):001:0> `date`
=> "Mo 24. Jan 16:07:15 CET 2011n"
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 foundn"
irb(main):011:0> $?.to_i
=> 32512

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读