# -*- coding: utf-8 -*- r'''把被我误删的 main() 入口找回来。 事故经过: swap_admin_page.py 把 relay.py 从 "_admin_page 那一行" 一直截到文件末尾, 但 _admin_page 之后**还有 main() 和 if __name__ == "__main__"**。 (我的扫描只找了 4 空格缩进的 " def ",没看见顶格的 "def main()" 和 "if __name__", 于是"到文件末尾"就把入口一起干掉了。) 结果:relay 一启动就退出,systemd 无限重启,所有接口 000。 教训:**"删到文件末尾"这种操作必须先确认末尾有什么。** 现在这一段单独摘出来恢复,并加了校验。 ''' from __future__ import annotations import ast import subprocess import sys from pathlib import Path ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote") RELAY = ROOT / "relay" / "relay.py" GIT = r"C:\Program Files\Git\bin\git.exe" def main() -> int: original = subprocess.run( [GIT, "show", "HEAD:relay/relay.py"], cwd=str(ROOT), capture_output=True, text=True, encoding="utf-8", errors="replace").stdout if not original: print(" [失败] 取不到 git 版本") return 1 # 从 "\ndef main()" 开始,到文件末尾 index = original.find("\ndef main()") if index < 0: # 试试别的名字 for name in ("\ndef serve()", "\ndef run()"): index = original.find(name) if index >= 0: break if index < 0: print(" [失败] git 版本里也找不到 main()") return 1 tail = original[index:] print(" 从 git 里摘到 %d 字符的入口代码(%d 行)" % (len(tail), tail.count("\n"))) current = RELAY.read_text(encoding="utf-8") if "if __name__" in current: print(" 现在已经有入口了,不用补") return 0 text = current.rstrip("\n") + "\n\n" + tail.lstrip("\n") RELAY.write_text(text, encoding="utf-8", newline="\n") try: ast.parse(text) print(" relay.py 语法 OK") except SyntaxError as exc: print(" [失败] 行 %s: %s" % (exc.lineno, exc.msg)) return 1 check = subprocess.run( [sys.executable, "-c", "import ast,sys;" "tree=ast.parse(open(r'%s',encoding='utf-8').read());" "names=[n.name for n in tree.body if isinstance(n,ast.FunctionDef)];" "print(' 模块级函数:', names);" "assert 'main' in names, 'main 不见了'" % RELAY], cwd=str(ROOT), capture_output=True, text=True, encoding="utf-8", errors="replace") print((check.stdout or "").strip()) if check.returncode != 0: print(" [失败] " + (check.stderr or "").strip()[-200:]) return 1 print(" ✓ main() 恢复了") return 0 if __name__ == "__main__": sys.exit(main())