【问题标题】:How to suppress error message from popen in lua如何抑制来自lua中popen的错误消息
【发布时间】:2020-07-02 06:54:56
【问题描述】:

我需要为主机上的给定 PID 运行此命令。

cmd = cat /proc/$PID/cgroup | grep -o  -e "docker-.*.scope"
io.popen(cmd)

当 PID 是一个容器时,这很好,但我偶尔会看到,

cat: /proc/12345/cgroup: No such file or directory

所以,我做了以下事情:

f1 = io.open("/proc/" .. PID .. "/cgroup", "r+")
if (f1 == nil) then return end

local filename = "/proc/" .. PID .. "/cgroup"
local cmd = "test -f " .. filename .. " && cat " .. filename .. " grep -o -e "docker-.*.scope"
local f2 = io.popen(cmd)

我仍然偶尔会看到错误消息, cat: /proc/5678/cgroup: 没有这样的文件或目录

请注意,我打开了 /proc/$PID/cgroup 并在传递给 popen 的命令中执行 test -f 检查。

我的假设是,在test -f 和后来的cat ... 命令之间,进程的 proc 条目消失了,因此 popen 命令失败。

上面的代码有问题吗?我只需要禁止显示此错误消息。抑制此错误消息的好方法是什么?

【问题讨论】:

    标签: lua popen


    【解决方案1】:

    您在 Lua 级别上无能为力,您只需修改您的 cat 命令以将 stderr 重定向到 /dev/null,就像您在终端上的 bash 中所做的那样:)

    local cmd = [[cat /proc/$PID/cgroup 2>/dev/null | grep -o  -e "docker-.*.scope"]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2012-06-20
      • 1970-01-01
      相关资源
      最近更新 更多