os.kill() 在控制台泄露 "Oops: Terminated

2 投票
2 回答
1240 浏览
提问于 2025-04-18 08:27

我正在尝试用树莓派制作一个照片框。这个功能是通过一个运动传感器来触发的,每当有动作时就会加载一张新图片:

proc = subprocess.Popen(["pgrep", "fbi"], stdout=subprocess.PIPE)
for pid in proc.stdout:
    os.kill(int(pid), signal.SIGTERM)
subprocess.call(["fbi","-noverbose","-a","-T","1","/home/pi/photoframe/photos/"+current_image],
                 stdout=shutup,
                 stderr=shutup)

这个功能运行得很好,不过每次调用os.kill()的时候,我的屏幕上会短暂出现

Oops: Terminated

然后才会显示下一张图片。

之前,我使用的是fbi命令的-T 2选项。这样会多出一行内容:

map: vt02 => fb0

现在我只看到那一行“oops”...

有没有人知道怎么能避免这个情况呢?我也可以接受一种解决方案,就是把tty文本设置成黑色背景黑色字体——如果这可能的话...我找了很多解决办法,但似乎都不管用。

2 个回答

0

我也遇到过同样的问题,最后我用了SIGHUP,结果问题解决了。

0

你可以使用 pkill 命令来搜索并结束进程,这个命令是 pgrep 的一种变体。

os.system('pkill fbi')

撰写回答