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
我目前正在尝试使用 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