我正在编写一个连接USB串行设备的python脚本。无论何时发送和执行命令,PIC都会返回一个#标签。 IE浏览器。 “命令执行成功。\ n#”
我希望我的python脚本在输出数据之前等待hashtag。我怎样才能做到这一点? 这就是我所拥有的。它似乎没有实际打印从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()
答案 0 :(得分:0)
port.readline()
将读取串口,直到收到\n
。因此,响应将包含字符串" Command已成功执行。 \ n&#34 ;.因为没有"#"在此字符串中,代码将再次遇到port.readline()
语句。这次它会读到"#"但由于没有" \ n",代码将被卡在那里导致无限循环。
Pyserial提供了一个名为read():
read(size=1)
参数:size - 要读取的字节数。返回:读取的字节数 港口。返回类型:bytes从串行端口读取大小字节。如果 如果设置了超时,则可能会根据请求返回较少的字符。没有 超时它将阻塞,直到读取所请求的字节数。
read()提供参数大小(默认值= 1),指定要读取的字节数。因此,您可以将PIC发送的字符串中的字节数指定为参数。您还可以使用以下替代方法:
// wait for "#" to print output
while True:
response += port.read()
if "#" in response:
print(response)
numLines = numLines + 1
if(numLines >= 1):
break
答案 1 :(得分:0)
如果您向设备发送一些空白区域,就像它是一个终端命令一样,它会将其转换为您的"#"在里面。我已成功使用该方法。具体来说,我发送一个空格" "加上终端线结束(即" \ n"或" \ r \ n"取决于设备)。