ruby - 从 Ruby 的反引号捕获 "command not found"错误?

标签 ruby subprocess backticks

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

关于ruby - 从 Ruby 的反引号捕获 "command not found"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783484/

相关文章:

ruby - Fixnum 在 Ruby 中被视为数组

ruby - roo gem 无法工作(NameError : uninitialized constant Excel)

.net - 当通过 C# 的 Process 类产生时,处理标准错误和程序输出的正确方法?

Java:通过进程控制浏览器

android - 为什么 Kotlin 数据类对象有反引号?

perl:这里是反引号运算符内的文档

Ruby 限制反引号表达式中的字符串替换?

ruby-on-rails - Rails - 是否可以为外部图像提供本地 URL?

ruby-on-rails - 如何让实例变量访问 rails 中的 'id'?

python - 如何将 subprocess.call() 输出推送到终端和文件?