繁体   English   中英

为什么我在telnet上运行时,为什么此代码无法在python中工作?

[英]Why won't this code work in python but when I telnet It does?

我正在尝试做的是使GUI控制树莓派bot。 我有telnet可以无线连接到它。 当我从计算机上的终端远程登录到它时,我可以运行echo 1=230 > /dev/servoblaster以使其中一个伺服器移动。

但是,当在python GUI中使用同一段代码时,它不会使伺服系统移动,但是我也没有收到错误消息。 某一时刻一切正常,但随后突然停止了。

以下是我用于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'))

有人可以帮我弄清楚为什么当我从终端连接到bot时可以控制它,但是当使用上述代码运行相同命令时却什么也没有发生,甚至没有错误消息。

万一这有什么用,我知道上面的代码至少可以到达我的树莓派的无线接收器,因为每次接收到信号时,上面的灯都会闪烁。

谢谢

用户名和密码命令中的空格使您的telnet会话无法实际登录pi bot。 空格不会被忽略。

你需要:

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

我建议使用Wireshark找出客户端实际发送的内容以及Raspberry Pi的响应。

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

要在Pi盒中仅查看telnet流量,请使用以下捕获过滤器:

host 192.168.1.128 and port 23

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM