如何检查屏幕是否正常运行?

3
如何在Python中检查给定名称的屏幕是否存在。例如,检查是否正在运行server1?
谢谢:)

3
“screen”在这里指的是屏幕。 - Petr Viktorin
1
你是在指 GNU Screen 吗? - Greg Hewgill
好的。你是指GNU screen吗? - Keith Thompson
假设答案是肯定的,我已重新为您的问题打上标签。 - Keith Thompson
3个回答

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")

以下是对代码的一些注释:

  • 由于screen返回退出码为1,这与check_output函数不兼容,因此我必须使用; trueshell=True
  • 另外,我添加了"."++\t(以确保我们匹配的是screen名称而不是输出的其他部分。

3

你可以使用subprocess和pgrep:

import subprocess

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

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.

请务必对“screen”名称进行输入验证,以防安全风险(想象一下攻击者将“; rm -rf / *”作为屏幕名称:))。 subprocess.check_call(“screen -ls | grep -q'srv%s'”%screen,shell = True) - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接