捕捉;“未找到命令”;来自Ruby的错误';什么是背虱?

捕捉;“未找到命令”;来自Ruby的错误';什么是背虱?,ruby,subprocess,backticks,Ruby,Subprocess,Backticks,有没有办法捕获Ruby脚本中的“未找到命令”错误?例如,假设: output = `foo` 如何捕获未安装foo的情况?我原以为我可以拯救一个异常,但这在1.8.7上似乎不起作用。是否有一种调用子流程的不同方式来完成我想要的任务?还是有不同的方法 更新 很抱歉,我忘了提到一个隐藏的要求:我希望解释器不会将命令行泄漏给用户(它可能包含敏感数据),因此,为什么首选异常捕获方法。再次为第一次遗漏此内容表示歉意。请使用返回码 irb(main):001:0> `date` => "Mo

有没有办法捕获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

谢谢然而,我忘了提到一个额外的要求,即不要将命令行泄漏出去;如果我理解正确,这仍然会向用户显示“未找到命令”消息。在我的回答中添加了如何执行此操作的示例。当您需要特定功能时,一个有用的策略是在尝试运行该功能之前,先运行飞行前检查,查找该功能、应用或代码。说出
哪个'foo'
或使用两个文件测试来查找文件的存在性及其可执行性,将告诉您在不实际尝试命令并失败的情况下继续操作是否安全。它有助于获得更好的用户体验,因为您可以控制对缺失功能的反应,或者选择另一条路线,或者通知用户由于缺失某些功能而无法继续。同意,但
哪个“foo”
不是跨平台的,我想不出一个跨平台的方法来做这件事,除了尝试并捕捉错误。。。
irb(main):010:0> `foo 2>&1`
=> "sh: foo: not found\n"
irb(main):011:0> $?.to_i
=> 32512