我收到以下行中的错误:
command = input("please type command.example open 1")
#call the serial_connection() function
ser.write(b"%d\r\n"%command)
基本上我想要用户编写的输入并将其解析为ser.write,而不需要输入并直接将字符串放入ser.write
,例如:
ser.write(b'close1\r\n')
工作正常,问题只发生在我尝试将输入结果作为字符串包含在ser.write中时
更多代码:
ser = 0
#Initialize Serial Port
def serial_connection():
COMPORT = int(input("Please enter the port number: "))
ser = serial.Serial()
ser.baudrate = 38400 #Suggested rate in Southco documentation, both locks and program must be at same rate
ser.port = COMPORT - 1 #counter for port name starts at 0
#check to see if port is open or closed
if not ser.isOpen():
print ('The Port %d is open - Will attempt to close lock 1 Stephan: '%COMPORT + ser.portstr)
#timeout in seconds
ser.timeout = 10
ser.open()
command = input("please type command.example open 1")
#call the serial_connection() function
ser.write(b"%d\r\n"%command)
else:
print ('The Port %d is **open** Stephan' %COMPORT)
任何澄清,请提出建议。
答案 0 :(得分:1)
%的左手参数应该是一个字符串,但是你已经传递了b“%d \ r \ n”这是一个字节文字。
建议替换
ser.write(("%d\r\n" % command).encode("ascii"))
答案 1 :(得分:0)
答案 2 :(得分:0)
也许你可以先尝试解码字节串(如果它不是常量字符串,否则只能用普通字符串开头),然后应用格式,然后再编码回来?
此外,您应该使用%s
而不是%d
,因为您的`命令是来自用户的直接输入,这是一个字符串。
Exmaple -
ser.write(("%s\r\n"%command).encode())
如果您没有传递任何参数,它默认为当前系统默认编码,您也可以指定要使用的编码,例如utf-8
或ascii
等。示例 - {{1 }或ser.write(("%s\r\n"%command).encode('utf-8'))