Мне нужно управлять моим xbee, используя данные, хранящиеся в mysql. В базу данных входит длинный адрес xbee, который используется для определения того, с каким xbee я общаюсь с сетью.Манипулировать строки в python
Следующий код работает отлично, но в этом примере я не получаю адрес из базы данных. Это всего лишь пример того, что работает.
addr3 = '\x00\x13\xa2\[email protected]\n!\x1c'
xbee.send('remote_at',
frame_id='\x01',
dest_addr_long=addr3, #<- this works!
command='D0',
parameter='\x04')
Теперь, как только я получить \ x00 \ x13 \ xa2 \ x00 @ \ п \ X1C из базы данных (она хранится в виде VARCHAR), я получаю сообщение об ошибке сказав: «% (поле ['name'], поле ['len'])) ValueError: данные, предоставленные для 'dest_addr_long', были не 8 байтами "
Вот код (я включил вывод шести строк печати ниже помочь с отладкой)
with con:
cur = con.cursor()
cur.execute("SELECT addrlong, pinStatus FROM deviceStatus WHERE addrlong <>''")
for i in range(cur.rowcount):
row = cur.fetchone()
addr1 = row[0]
Status = row[1]
addr2 = repr(addr1)
addr3 = '\x00\x13\xa2\[email protected]\n!\x1c'
print "Address1: %s" % addr1
print "Address2: %s" % addr2
print "Address3: %s" % addr3
print "Size of Addr1: %s" % sys.getsizeof(addr1)
print "Size of Addr2: %s" % sys.getsizeof(addr2)
print "Size of Addr3: %s" % sys.getsizeof(addr3)
if Status == 0: #turn off
xbee.send('remote_at',
frame_id='\x01',
dest_addr_long=addr2, #<-problem is here
command='D0',
parameter='\x04')
if Status == 1: #turn on
xbee.send('remote_at',
frame_id='\x01',
dest_addr_long=addr2, #<-problem is here
command='D0',
parameter='\x05')
и выход
Address1: \x00\x13\xa2\[email protected]\n!\x1c
Address2: '\\x00\\x13\\xa2\\[email protected]\\n!\\x1c'
Address3: [email protected]
!
Size of Addr1: 45
Size of Addr2: 53
Size of Addr3: 29
Я, очевидно, пробовал просто dest_addr_long=addr1,
безрезультатно.
Я пробовал много комбинаций струнных манипуляций, таких как добавление и удаление скобок и десятки комбинаций str и repr, но я думаю, что я нахожусь на неправильном пути полностью.
Я думаю, что мне нужно, чтобы спросить, почему
addr3 = '\x00\x13\xa2\[email protected]\n!\x1c' print "Address3: %s" % addr3
выход
Address3: [email protected] !
и как только я понимаю, что, тогда как я могу манипулировать ADDR1 из базы данных, чтобы соответствовать addr3, потому что линия dest_addr_long=addr3,
работает отлично.
Бинго - один простой и правильный ответ. Спасибо, теперь я могу заняться вещами. –