在ruby中使用Open3执行top命令

时间:2017-08-07 09:24:51

标签: ruby popen3

我正在尝试使用ruby中的Open3模块在ruby中执行“top -n 1”命令。

这是我的代码

command = "top -n 1"
Open3.popen3 (command) do |i,o,e,t|
        i.close
        exit_status = t.value
        unless exit_status.success?
                puts "NOPE"
        end
        t.value
end

我得到的只是NOPE。即使我尝试打印o.reado.gets,我得到的只是一个空白行。

无论如何我可以使用open3来执行该命令吗?有没有其他方法可以执行它?我做错了吗?

我看到我可以使用反引号(`)来执行系统命令。这是一个好习惯吗?我看到几篇文章和博客说它不是。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以通过打印块参数e

来查看问题

错误应该是这样的:

  

顶部:失败tty get

尝试在非交互模式下运行top时,这种情况很常见。要覆盖此设置,您需要-b的{​​{1}}选项。

top

-b :Batch-mode operation Starts top in Batch mode, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you've set with the `-n' command-line option or until killed. 即可。

还有很多方法可以在ruby中使用check them here进行系统调用。