如何在lua中抑制popen的错误消息

我需要在主机上针对给定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: No such file or directory

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

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

上面的代码有什么问题吗? 我只需要抑制此错误消息。 有一个好方法来抑制此错误消息吗?

点赞
用户4984564
用户4984564

在 Lua 层面上,你没有太多可以做的,你只需要修改你的 cat 命令将 stderr 重定向到 /dev/null,如同在终端上使用 bash 一样 :)

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