You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python借助SSH永久启动远程Python进程?

解决远程SSH启动Python脚本时的语法错误问题

核心原因

你遇到的SyntaxError是因为远程SSH会话默认使用的Python版本过低:def handle_client(self, connfd: socket.socket)这种函数参数类型注解是Python 3.5及以上才支持的语法,你本地用的3.11.4完全兼容,但远程环境调用了不支持该语法的旧版本Python(比如Python 2.x或3.4及以下)。

解决方法

1. 显式指定兼容的Python解释器路径

直接在远程命令中使用你本地工作的那个Python解释器绝对路径(即本地进程里的/home/pi/.pyenv/versions/3.11.4/bin/python),修改subprocess的命令:

cmd = ["ssh", target, f"nohup /home/pi/.pyenv/versions/3.11.4/bin/python {Conf.FILES[0]} 1>./Server.log 2>&1 &"]

这样能强制远程使用指定的高版本Python,避免调用系统默认的旧版本。

2. 先确认远程环境的Python版本(可选但推荐)

先远程执行命令排查环境,确认可用的Python版本和路径:

ssh target "python --version; python3 --version; which python; which python3"

也可以在Python代码中用subprocess执行这个命令,确保你指定的解释器路径在远程机器上确实存在。

3. 优化后台进程的稳定性

用&让进程后台运行时,SSH会话断开可能会导致进程被终止,可以加上disown或者用setsid提升可靠性:

  • 用disown:
    cmd = ["ssh", target, f"nohup /home/pi/.pyenv/versions/3.11.4/bin/python {Conf.FILES[0]} 1>./Server.log 2>&1 & disown"]
    
  • 用setsid:
    cmd = ["ssh", target, f"setsid nohup /home/pi/.pyenv/versions/3.11.4/bin/python {Conf.FILES[0]} 1>./Server.log 2>&1 &"]
    

验证方法

启动后可以远程查看进程,确认使用的是指定的Python版本:

ssh target "ps aux | grep Server.py"

内容的提问来源于stack exchange,提问作者RyderHook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:37:31