Вот как я воспроизвожу проблему:
Создайте файл журнала с именем 'temp.log' и вставьте в него эту строку
DEBUG: packetReceived '\x61\x62\x63'
Я хочу иметь скрипт, который будетпрочитайте строку из файла журнала и декодируйте двоичную строковую часть ('\ x61 \ x62 \ x63').Для декодирования я использую struct, поэтому:
struct.unpack('BBB', '\x61\x62\x63')
Должен дать мне
(97, 98, 99)
Вот скрипт, который я использую
import re
import struct
import sys
f = open(sys.argv[1], 'r')
for line in f:
print line
packet = re.compile(r"packetReceived \'(.*)\'").search(line).group(1)
# packet is the string r'\x61\x62\x63'
assert(len(packet), 12)
# this works ok (returns (97, 98, 99))
struct.unpack('BBB', '\x61\x62\x63')
# this fails because packet is interpreted as r'\\x61\\x62\x63'
struct.unpack('BBB', packet)
Iзапустите скрипт, используя temp.log в качестве аргумента скрипта.
Надеюсь, комментарии высветят мою проблему.Как я могу получить пакет переменных, который будет интерпретироваться как '\ x61 \ x62 \ x63' ??
ВНЕ: При первом редактировании этого вопроса я предполагал, что чтение строки из файла было таким же, какthis: line = "DEBUG: packetReceived '\ x61 \ x62 \ x63'", который сделал пакет == 'abc'
, однако фактически он такой же, как эта (с использованием необработанной строки) line = r "DEBUG: packetReceived'\ x61 \ x62 \ x63' "