在 ruby 中使用 Open3 执行 top 命令
Executing the top command using Open3 in ruby
我正在尝试使用 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
我得到的只是否定。即使我尝试打印 o.read
或 o.gets
,我得到的也只是一个空行。
有什么办法可以用open3来执行那个命令吗?还有其他执行方法吗?我做错了什么吗?
我看到我可以使用反引号 (`) 来执行系统命令。这是一个好习惯吗?我看到几篇文章和博客都说不是。
提前致谢。
您可以通过打印块参数来查看您的问题 e
:
错误应该是这样的:
top: failed tty get
这在非交互模式下尝试 运行 top
时很常见。要覆盖它,您需要 top
的 -b
选项。
-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,check them here.
中系统调用的方式也很多
我正在尝试使用 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
我得到的只是否定。即使我尝试打印 o.read
或 o.gets
,我得到的也只是一个空行。
有什么办法可以用open3来执行那个命令吗?还有其他执行方法吗?我做错了什么吗?
我看到我可以使用反引号 (`) 来执行系统命令。这是一个好习惯吗?我看到几篇文章和博客都说不是。
提前致谢。
您可以通过打印块参数来查看您的问题 e
:
错误应该是这样的:
top: failed tty get
这在非交互模式下尝试 运行 top
时很常见。要覆盖它,您需要 top
的 -b
选项。
-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,check them here.
中系统调用的方式也很多