Я думаю, что вы хотите:
handleR = open(self.getInput(), 'rb')
handleW = open(self.getOutput(), 'wb')
Это обеспечит чтение и запись потоков байтов. Также вы можете анализировать двоичные строки без eval:
char = chr(int(byte, 2))
И, конечно, было бы быстрее использовать битовую манипуляцию. Вместо добавления строки можно использовать <<
(сдвиг влево) и |
(поразрядно или).
РЕДАКТИРОВАТЬ: Для фактического письма, вы можете использовать:
handleW.write(bytes([char]))
Создает и записывает байтов из списка, состоящего из одного числа.
РЕДАКТИРОВАТЬ 2: Исправление должно быть:
handleW.write(bytes([int(byte, 2)]))
Нет необходимости использовать chr
.