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

ang*_*lee 1 lua popen

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

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

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

cat: /proc/12345/cgroup: No such file or directory
Run Code Online (Sandbox Code Playgroud)

因此,我执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

我仍然偶尔看到错误消息, cat: /proc/5678/cgroup: No such file or directory

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

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

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

Dar*_*yer 5

在 Lua 级别上你能做的不多,你只需要修改你的cat命令来重定向stderr/dev/null你在终端上的 bash 中所做的:)

local cmd = [[cat /proc/$PID/cgroup 2>/dev/null | grep -o  -e "docker-.*.scope"]]
Run Code Online (Sandbox Code Playgroud)