我正在编写一个连接到 USB 串行设备的 python 脚本。每当发送并执行命令时,PIC 都会返回一个主题标签。 IE。 “命令执行成功。 #“
我希望我的 python 脚本在输出数据之前等待主题标签。我怎样才能做到这一点? 这就是我所拥有的。它似乎并没有实际打印从 PIC 收到的文本。任何帮助表示赞赏
if port.isOpen():
try:
for x in range(0,100):
time.sleep(0.05)
port.write("command 1" + "\r\n")
numLines = 0
// wait for "#" to print output
while True:
response = port.readline()
if "#" in response:
print(response)
numLines = numLines + 1
if(numLines >= 1):
break
time.sleep(0.05)
port.write("command 2" + "\r\n")
numLines = 0
// wait for "#" to print output
while True:
response = port.readline()
if "#" in response:
print(response)
numLines = numLines + 1
if(numLines >= 1):
break
time.sleep(0.05)
port.write("command 3" + "\r\n")
numLines = 0
// wait for "#" to print output
while True:
response = port.readline()
if "#" in response:
print(response)
numLines = numLines + 1
if(numLines >= 1):
break
except Exception, e1:
print("An error occured: " + str(e1))
port.close()
port.readline()
将读取串行端口,直到收到 \n
。因此,响应将包含字符串“命令已成功执行。
"。由于该字符串中没有“#”,因此代码将再次遇到 port.readline()
语句。这次它将读取“#”,但由于没有“
",代码将卡在那里,导致无限循环。
Pyserial 提供了一个名为
read():
的方法
read(size=1)
参数: size – 要读取的字节数。返回:读取的字节数 港口。返回类型:bytes 从串口读取size字节。如果 设置超时后,它可能会根据请求返回更少的字符。没有 超时它将阻塞,直到读取请求的字节数。
read() 提供一个参数 size(默认 =1),指定要读取的字节数。因此,您可以将 PIC 发送的字符串中的字节数指定为参数。您还可以使用以下替代方案:
// wait for "#" to print output
while True:
response += port.read()
if "#" in response:
print(response)
numLines = numLines + 1
if(numLines >= 1):
break
如果您向设备发送一些空格,就好像它是终端命令一样,它会刺激它做出带有“#”的响应。我已经成功地使用了该方法。具体来说,我发送一个空格“”加上终端行结尾(即“ “ 或者 ” “取决于设备)。