如何检查屏幕是否在运行?

3 投票
3 回答
3226 浏览
提问于 2025-04-17 05:40

如何在Python中检查是否有一个指定名称的屏幕。例如,检查一下server1是否在运行?

谢谢 : )

3 个回答

0

首先,你想要达到什么目的呢?你知道其实可以很简单地重新连接一个正在运行的屏幕会话,对吧?

screen -DRS admin # creates a new session if it isn't running

同样,你可以使用 screen -x -S admin共享 这个 admin 会话,而不会强制断开已经连接的用户。


直接的回答:

你可以直接使用下面的命令:

screen -ls

这个命令会列出所有正在运行的会话,并显示它们是否已经连接:

There are screens on:
        6675.third      (11/04/2011 09:25:49 PM)        (Attached)
        6668.pts-2.koolu        (11/04/2011 09:25:38 PM)        (Attached)
        6644.admin      (11/04/2011 09:25:21 PM)        (Detached)
3 Sockets in /var/run/screen/S-sehe.
3

你可以使用subprocess和pgrep:

import subprocess

p = subprocess.check_output(['pgrep', '-f', 'screen'])
print p
5

查找当前屏幕会话的内置命令是 screen -ls

如果想在 Python 中实现相同的功能,可以使用:

from subprocess import check_output

def screen_present(name):
        var = check_output(["screen -ls; true"],shell=True)
        if "."+name+"\t(" in var:
                print name+" is running"
        else:
                print name+" is not running"

screen_present("server1")

关于这段代码,有几点说明:

  • 我需要使用 ; trueshell=True,因为 screen 命令返回的退出代码是 1,这会和 check_output 函数不太兼容。
  • 另外,我加了 "."+ +\t(,这样可以确保我们匹配的是屏幕名称,而不是输出的其他部分。

撰写回答