LINUX.ORG.RU

История изменений

Исправление Darth_Revan, (текущая версия) :

у тебя для 20 будет один сценарий, а на 20 тыс ты бросишься переписывать. причем сидеть будешь и гуглить библиотеку или подходящий метод для данного нового кейза.

Если нужно обязательно по мере вывода парсить, то тогда вот:

#!/usr/bin/env python3
import re
import subprocess
import sys
import yaml

out = {}
proc = subprocess.Popen(["xrandr"],
                        stdout=subprocess.PIPE, universal_newlines=True)
for line in proc.stdout:
    res = re.match(
            r"(\S+)\sconnected\s+(primary\s+)?(\d+)x(\d+)([+-]\d+)([+-]\d+)",
            line)
    if res:
        out[res[1]] = {
            "name"    : res[1],
            "w"       : int(res[3]),
            "h"       : int(res[4]),
            "x"       : int(res[5]),
            "y"       : int(res[6]),
            "primary" : 1 if res[2] else 0,
        }

yaml.dump(out, sys.stdout, default_flow_style=False)

Исходная версия Darth_Revan, :

у тебя для 20 будет один сценарий, а на 20 тыс ты бросишься переписывать. причем сидеть будешь и гуглить библиотеку или подходящий метод для данного нового кейза.

Если нужно обязательно по мере вывода парсить, то тогда вот:

#!/usr/bin/env python3
import re
import subprocess
import sys
import yaml

out = {}
proc = subprocess.Popen(["xrandr"],
                        stdout = subprocess.PIPE, universal_newlines=True)
for line in proc.stdout:
    res = re.match(
            r"(\S+)\sconnected\s+(primary\s+)?(\d+)x(\d+)([+-]\d+)([+-]\d+)",
            line)
    if res:
        out[res[1]] = {
            "name"    : res[1],
            "w"       : int(res[3]),
            "h"       : int(res[4]),
            "x"       : int(res[5]),
            "y"       : int(res[6]),
            "primary" : 1 if res[2] else 0,
        }

yaml.dump(out, sys.stdout, default_flow_style=False)