关于popen3:在ruby中使用Open3执行top命令

Executing the top command using Open3 in ruby

我尝试使用Ruby中的Open3模块在Ruby中执行"top-n 1"命令。

这是我的密码

1
2
3
4
5
6
7
8
9
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

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

我能用open3执行这个命令吗?还有其他的执行方法吗?我做错什么了吗?

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

事先谢谢。


您可以通过打印块参数e来查看您的问题:

错误应该如下所示:

top: failed tty get

这在尝试以非交互模式运行top时很常见。要覆盖这一点,您需要top-b选项。

1
2
3
-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.

那么,command = 'top -bn 1'就可以了。

还有很多方法可以让系统调用Ruby,请在这里检查它们。