osgos_postinstall/postinstall/option/update.py

58 lines
1.9 KiB
Python
Raw Normal View History

2025-06-09 14:32:16 +05:00
import subprocess
from dialog import Dialog
from postinstall.logger import logger
logging = logger
def run_update():
d = Dialog(dialog="dialog")
code = d.yesno("Вы действительно хотите обновить систему?", width=50)
if code != d.OK:
return
commands = [["apt", "update"], ["apt", "upgrade", "-y"]]
d.gauge_start("Обновление системы", percent=0)
try:
for i, command in enumerate(commands):
d.gauge_update(i * 50, f"Выполняется: {' '.join(command)}")
process = subprocess.Popen(
["sudo"] + command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
)
while True:
line = process.stdout.readline()
if not line:
break
d.gauge_update(i * 50 + (50 if i == 1 else 25), line.strip())
process.wait()
if process.returncode != 0:
error = process.stderr.read()
raise subprocess.CalledProcessError(process.returncode, command, error)
d.gauge_update(100, "Обновление системы завершено успешно")
d.gauge_stop()
except subprocess.CalledProcessError as e:
logging.error(f"Ошибка при обновлении системы: {e}")
d.gauge_stop()
d.msgbox(f"Ошибка при обновлении системы: {e}")
except Exception as e:
logging.error(f"Неожиданная ошибка при обновлении системы: {e}")
d.gauge_stop()
d.msgbox(f"Неожиданная ошибка при обновлении системы: {e}")
d.msgbox("Обновление системы завершено", width=50)
if __name__ == "__main__":
run_update()