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

Windows系统下Pexpect PopenSpawn无法使用问题求助

解决Windows下PopenSpawn调用SSH报错FileNotFoundError的问题

首先,这个错误的核心原因很明确:你的Windows系统找不到ssh命令。默认情况下,部分Windows版本(尤其是较旧的Win10或更早系统)没有预装OpenSSH客户端,或者ssh.exe所在路径不在系统的环境变量PATH中,导致subprocess找不到这个可执行文件。

下面是一步步的解决方案:

1. 确认并安装OpenSSH客户端

  • 方法一:通过Windows设置安装
    打开「设置」→「应用」→「可选功能」→「添加功能」,搜索「OpenSSH客户端」,点击安装。
  • 方法二:通过PowerShell安装
    以管理员身份打开PowerShell,运行命令:
    Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
    

安装完成后,打开cmd或PowerShell输入ssh,如果能看到命令提示,说明安装成功。

2. 确保ssh路径在系统PATH中

如果安装后还是报错,可能是ssh.exe的路径没加入环境变量。默认安装路径是C:\Windows\System32\OpenSSH\,你可以:

  • 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,在系统变量的PATH中添加这个路径。
  • 或者在代码里直接指定ssh.exe的完整路径,修改你的初始化代码:
    child = pexpect.popen_spawn.PopenSpawn('C:\\Windows\\System32\\OpenSSH\\ssh.exe pi@192.168.178.34')
    

3. 修复代码中的其他潜在问题

除了路径问题,你的代码还有两个需要调整的地方:

  • async=True的误用:当expect使用async=True时,返回的是一个asyncio.Future对象,而不是直接的匹配索引0或1。你需要去掉async=True,或者改用异步方式处理,但对于简单的SSH交互,同步方式更适合:
    a = child.expect(['password:', 'The authenticity of host'], timeout=300)
    
  • 密码不一致:代码中两种情况用了不同的密码(123456789和raspberry),记得改成你树莓派的真实密码,避免登录失败。

修改后的完整测试代码示例:

import traceback
import pexpect
from pexpect.popen_spawn import PopenSpawn

try:
    # 指定ssh完整路径(如果PATH没配置的话)
    child = pexpect.popen_spawn.PopenSpawn('C:\\Windows\\System32\\OpenSSH\\ssh.exe pi@192.168.178.34')
    # 去掉async=True,使用同步匹配
    a = child.expect(['password:', 'The authenticity of host'], timeout=300)
    if a == 0:
        child.sendline('raspberry')  # 统一为树莓派真实密码
        print('This IP already exists in known_hosts!')
    elif a == 1:
        print('Adding this IP to known_hosts...')
        child.sendline('yes')
        child.expect('password:')
        child.sendline('raspberry')
    # 发送测试命令
    child.sendline("echo TestMessage")
    child.interact()
except pexpect.EOF:
    traceback.print_exc()
except Exception as e:
    print(f"Unexpected error: {e}")
    traceback.print_exc()

这样调整后,应该就能正常启动SSH连接并完成交互了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:07