как проверить работает ли экран - PullRequest
2 голосов
/ 05 ноября 2011

Как проверить (в python), работает ли экран с заданным именем (например, server1)? Спасибо:)

Ответы [ 3 ]

3 голосов
/ 12 ноября 2011

Встроенная команда для поиска текущих сеансов экрана: 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, потому что экран возвращает код выхода 1, который плохо работает с функцией check_output.
  • Кроме того, я добавил "."+ и +\t(, чтобы убедиться, что мы соответствовали экранному имени, а не другой части распечатки.
2 голосов
/ 05 ноября 2011

вы можете использовать подпроцесс и pgrep:

import subprocess

p = subprocess.check_output(['pgrep', '-f', 'screen'])
print p
0 голосов
/ 05 ноября 2011

Прежде всего, чего вы пытаетесь достичь?Вы знаете, что вы можете просто присоединить сеанс работающего экрана, не так ли?

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

Аналогично используйте screen -x -S admin до общий доступ сеанс admin без принудительного отсоединения подключенного пользователяs).


Прямой ответ:

Вы можете просто использовать вывод

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.
...