Pexpect PopenSpawn 不适用于 Windows

Pexpect PopenSpawn does not work on Windows

我目前正在尝试使用 pexpect 来控制与我的 raspberry pi 的简单 ssh 连接,我将其用于某些智能家居控制。

我刚开始使用它,我是在"Violent Python"一本渗透测试者的书的帮助下学习的。

我在 Windows 上了解到 pexpect.spawn 对象在 Windows 上不可用。在文档中,有人说我必须改用 PopenSpawn 。我有一个简单的脚本:

import traceback
import pexpect
from pexpect.popen_spawn import PopenSpawn

try:
    child = pexpect.popen_spawn.PopenSpawn('ssh pi@192.168.178.34')
    a = child.expect(['password:', 'The authenticity of host'], timeout=300, async=True)
    if a == 0:
        child.sendline('123456789')
        print('this ip has exists in know_host files!')
    if a == 1:
        print('this ip will be added to know_host files!')
        child.sendline('yes')
        child.expect('password:')
        child.sendline('raspberry')
        # send test
        child.sendline("echo TestMessage")
        child.interact()
except pexpect.EOF:
    traceback.print_exc()

这总是给我这个错误:

Traceback (most recent call last):
  File "D:/CENSORED/pexpect-master/sshforpi2.py", line 6, in <module>
    child = pexpect.popen_spawn.PopenSpawn('ssh pi@192.168.178.34')
  File "D:/CENSORED/pexpect-master\pexpect\popen_spawn.py", line 46, in __init__
    self.proc = subprocess.Popen(cmd, **kwargs)
  File "C:\Python34\lib\subprocess.py", line 859, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1112, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system can't find the given file.

我发现 this teddyjoe 人问同样的事情 - 他(还)没有得到答案。

SSH 不是原生的 windows 命令。在下面的行映射命令中指向位于 C:\Windows\System32\OpenSSH 中的 ssh。 OpenSSH 现在已添加到 System32 中的 Windows 10。试试这个,我认为它可能对你有用。

child = pexpect.popen_spawn.PopenSpawn('ssh pi@192.168.178.34')

试试这个

command = 'C:\Windows\system32\OpenSSH\ssh.exe pi@192.168.178.34'
child = pexpect.popen_spawn.PopenSpawn(command)

更好的是,您可以为 Linux 和 运行 您的脚本安装新的 Windows 子系统。 Windows Subsystem for Linux Installation Guide for Windows 10