Переглянути джерело

!2 尝试修复重启异常问题

pcacc 1 місяць тому
батько
коміт
008e8087f4
2 змінених файлів з 21 додано та 7 видалено
  1. 20 6
      app_dongri.py
  2. 1 1
      runApp.bat

+ 20 - 6
app_dongri.py

@@ -169,12 +169,26 @@ def handle_reset_script():
 @socketio.on('restart_game')
 def handle_restart_game():
     python = sys.executable
-    while '--reset' in sys.argv:
-    # 从 sys.argv 列表中删除 --reset 参数
-        sys.argv.remove('--reset')
-    print("当前参数:", sys.argv)
-    subprocess.Popen([python, *sys.argv, '--reset'])
-    sys.exit(0)
+    script = os.path.abspath(sys.argv[0]) # 获取当前脚本的绝对路径
+
+    # 构建新的参数列表,移除旧的 --reset 并添加新的
+    new_args = [arg for arg in sys.argv[1:] if arg != '--reset'] # 排除脚本名和旧的 --reset
+    
+    print(f"当前 Python 解释器: {python}")
+    print(f"当前脚本路径: {script}")
+    print(f"重启参数: {[python, script, *new_args, '--reset']}")
+
+    try:
+        # 使用 os.execv 是一种更“彻底”的重启方式,它会替换当前进程
+        # 但 subprocess.Popen 也可以,前提是旧进程退出
+        # subprocess.Popen([python, script, *new_args, '--reset'])
+        os.execv(python, [python, script, *new_args, '--reset'])
+    except Exception as e:
+        print(f"重启失败: {e}")
+        # 如果 os.execv 失败,可以尝试 subprocess.Popen 作为备用
+        subprocess.Popen([python, script, *new_args, '--reset'])
+
+    sys.exit(0) # 终止当前进程
 
 @app.route('/restart_game', methods=['POST'])
 def http_restart_game():

+ 1 - 1
runApp.bat

@@ -1,2 +1,2 @@
 taskkill /f /im python
-python app_dongri.py
+python app_dongri.py --reset