如何检查屏幕是否在运行?
如何在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")
关于这段代码,有几点说明:
- 我需要使用
; true
和shell=True
,因为 screen 命令返回的退出代码是1
,这会和check_output
函数不太兼容。 - 另外,我加了
"."+
和+\t(
,这样可以确保我们匹配的是屏幕名称,而不是输出的其他部分。