Tak som to vyriesil tymto skriptom:
#!/usr/bin/env python3
"""pause_xfce.py:
Pozastavi alebo znova spusti tieto procesy:
xfce4-session
xfce4-panel
xfdesktop
xfwm4
Pozastavi ich pri zadanom parametri "-p" alebo "--pause".
Spusti pri parametri "-c" alebo "--cont" alebo "--continue"
Pomoc sa zobrazi pri parametri "-h" alebo "--help"
"""
import re, sys, subprocess
# regularny vyraz pre najdenie pidu procesu
find_proc_re = re.compile(r"""
^(?:\S+\s+) # prva zlozka prikazu "ps aux" (vlastnik)
(?P<pid>\d+) # druha zlozka (pid) je zachytena
\s+(?:\S+\s+){8} # ostatne zlozky vystupu
(?P<command>\S+) # zachyteny prikaz orezany od parametrov
""", re.MULTILINE | re.VERBOSE)
# zoznam procesov pre pozastavenie alebo spustenie
process_list = {"xfce4-session": None,
"xfce4-panel": None,
"xfdesktop": None,
"xfwm4": None}
# informacie o vsetkych procesoch ziskane pomocou prikazu "$ ps aux"
ps_aux = subprocess.getoutput("ps aux")
# vyhladanie pid jednotlivych procesov
for key in process_list.keys():
for match in find_proc_re.finditer(ps_aux):
if match.group("command") == key:
process_list[key] = match.group("pid")
# spracovanie parametrov
if len(sys.argv) != 2 or sys.argv[1] in ("-h", "--help"):
# ziskanie pomoci
print("pause_xfce.py argument\n"
"-h or --help Show this help\n"
"-p or --pause Pause Xfce processes\n"
"-c or --cont or --continue Continue Xfce processes")
elif sys.argv[1] in ("-p", "--pause"):
# pozastavenie procesov Xfce
for key in process_list.keys():
if process_list[key] != None:
# pozastavenie procesu
subprocess.call(["kill", "-STOP", process_list[key]])
print("Process '{}' was stopped".format(key))
else:
print("Process '{}' isn't running".format(key))
elif sys.argv[1] in ("-c", "--cont", "--continue"):
for key in process_list.keys():
if process_list[key] != None:
# spustenie procesu
subprocess.call(["kill", "-CONT", process_list[key]])
print("Process '{}' was continued".format(key))
else:
print("Process '{}' isn't running".format(key))
else:
print("Invalid argument: {}".format(sys.argv[1]))