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()