Как проверить, что DISPLAY =: 0 существует из python? - PullRequest
1 голос
/ 24 октября 2019

Команда:

ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

Вывод:

DISPLAY=:0

Как проверить DISPLAY=:0 существует из Python?

Пока DISPLAY=:0 существует, import os; print(os.environ['DISPLAY']) нет.

python -c "import os; print(os.environ['DISPLAY'])"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'DISPLAY'

По какой-то причине это выдает пустую строку:

import subprocess
subprocess.getoutput('ps e | grep -Po " DISPLAY=[\\.0-9A-Za-z:]* " | sort -u')

Вывод:

''

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Если вы хотите проверить, использует ли какой-либо процесс DISPLAY: 0

import psutil


def GetListOfDisplays():
    displays=[]
    for proc in psutil.process_iter():
        try:
            if('DISPLAY'  in proc.environ()):
                displays.append(proc.environ()['DISPLAY'].split(':')[1])
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return list(set(displays))

print( '0' in GetListOfDisplays())

Если есть процесс, использующий DISPLAY =: 0печать'Правда'еще'Ложь'

Проверено на Python 3.7.4

Примечание:Если вы выполняете этот скрипт как пользователь без прав администратора, скажем, гость. Тогда он не сможет увидеть, какой ДИСПЛЕЙ используют процессы администратора. Запуск от имени пользователя root позволит вам получать информацию о любом процессе независимо от пользователя.

Также вам потребуется установленный psutil

pip install psutil

psutil - pypi.org

0 голосов
/ 24 октября 2019

у меня работает:

>>> import os
>>> os.environ['DISPLAY']
':0'
>>> print(os.environ['DISPLAY'])
:0
>>> 

$ python -c "import os; print(os.environ['DISPLAY'])"
:0
$ 

Не проблема вообще =)

...