|
@@ -163,10 +163,21 @@ def handle_get_title():
|
|
@socketio.on('reset_script')
|
|
@socketio.on('reset_script')
|
|
def handle_reset_script():
|
|
def handle_reset_script():
|
|
python = sys.executable
|
|
python = sys.executable
|
|
- while '--reset' in sys.argv:
|
|
|
|
- # 从 sys.argv 列表中删除 --reset 参数
|
|
|
|
- sys.argv.remove('--reset')
|
|
|
|
- os.execl(python, python, *sys.argv)
|
|
|
|
|
|
+ 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, '']}")
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ os.execv(python, [python, script, *new_args, ''])
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(f"重置失败: {e}")
|
|
|
|
+ subprocess.Popen([python, script, *new_args, ''])
|
|
|
|
+ sys.exit(0) # 终止当前进程
|
|
|
|
|
|
@socketio.on('restart_game')
|
|
@socketio.on('restart_game')
|
|
def handle_restart_game():
|
|
def handle_restart_game():
|
|
@@ -181,13 +192,9 @@ def handle_restart_game():
|
|
print(f"重启参数: {[python, script, *new_args, '--reset']}")
|
|
print(f"重启参数: {[python, script, *new_args, '--reset']}")
|
|
|
|
|
|
try:
|
|
try:
|
|
- # 使用 os.execv 是一种更“彻底”的重启方式,它会替换当前进程
|
|
|
|
- # 但 subprocess.Popen 也可以,前提是旧进程退出
|
|
|
|
- # subprocess.Popen([python, script, *new_args, '--reset'])
|
|
|
|
os.execv(python, [python, script, *new_args, '--reset'])
|
|
os.execv(python, [python, script, *new_args, '--reset'])
|
|
except Exception as e:
|
|
except Exception as e:
|
|
print(f"重启失败: {e}")
|
|
print(f"重启失败: {e}")
|
|
- # 如果 os.execv 失败,可以尝试 subprocess.Popen 作为备用
|
|
|
|
subprocess.Popen([python, script, *new_args, '--reset'])
|
|
subprocess.Popen([python, script, *new_args, '--reset'])
|
|
|
|
|
|
sys.exit(0) # 终止当前进程
|
|
sys.exit(0) # 终止当前进程
|