为什么这段代码不能在python中工作,但是当我telnet时它能工作?

2024-09-30 14:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是做一个图形用户界面来控制一个树莓派机器人。我有telnet无线连接。当我从计算机上的终端远程登录它时,我可以运行echo 1=230 > /dev/servoblaster来移动其中一个伺服。在

然而,当在pythongui中使用同一段代码时,它不会使伺服移动,但我也不会收到错误消息。一度一切正常,但突然停了下来。在

下面是我用于GUI的python脚本的简化版本:

from tkinter import *
import telnetlib

bot = telnetlib.Telnet("192.168.1.128")
bot.read_until(b"login: ")
bot.write(("pi \n").encode('ascii'))
bot.read_until(b"Password: ")
bot.write(("pi \n").encode('ascii'))
bot.write(("cd /home/pi/pibits/ServoBlaster/user \n").encode('ascii'))
bot.write(("sudo ./servod \n").encode('ascii'))
bot.write(("cd \n").encode('ascii'))

bot.write(("echo 1=230 > /dev/servoblaster \n").encode('ascii'))

当我在运行一个错误的终端时,为什么我无法控制上面的代码。在

以防万一这有什么用,我知道上面的代码至少已经到达了我的raspberry pi的无线接收器,因为每当它收到信号时,上面的灯都会闪烁。在

谢谢


Tags: 代码devimportecho终端readbot错误
2条回答

我建议使用Wireshark来计算出客户端实际发送了什么,以及您的Raspberry Pi响应了什么。在

我强烈怀疑您的问题的原因是您正在等待错误的模式-例如,它可能是b'Login: ',或者{},或者其他任何类型,并且随着更新您的getty或类似的二进制文件,Wireshark将帮助您定位问题。在

要只查看Pi盒的telnet流量,请使用以下捕获筛选器:

host 192.168.1.128 and port 23

用户名和密码命令中的空格会阻止telnet会话实际登录到pibot。空格不会被忽略。在

您需要:

bot.read_until(b"login: ")
bot.write("pi\n".encode('ascii'))
bot.read_until(b"Password: ")
bot.write("pi\n".encode('ascii'))

相关问题 更多 >