Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Python: Пытаюсь реализовать препроцессор  [new]
AlekseySQL
Member [заблокирован]

Откуда:
Сообщений: 952
Хочу в комментариях, расположенных на той же строке после кода, писать код логирования, а чтобы не произошло путаницы такие комментарии начинать с последоательности #! Например:
а(42) #! MyLoger.lof('Вызов функции a')


Взял эту чудесную статью и создал модуль cpreprocessor (заменив только процедуру 'preprocess'):

+
from encodings import utf_8
import encodings
import codecs
import io

def cpreprocessor_decode(input, errors='strict'):
    print('!!!')
    stream = io.StringIO(bytes(input).decode('utf-8'))
    output = ''.join(stream.readlines())
    output = preprocess(output)
    return output, len(input)


def preprocess(code):
    print('!!!')
    new_code = ''
    for line in code.split('\n'):
        position = line.find('#!')
        if position == -1:
            new_code += line + '\n'
        else:
            new_code += line[:position-1] + '\n'
            new_code += line[position+2] + '\n'
        
    return new_code


def search_function(encoding):
    print('!!!')
    if encoding == 'cpreprocessor':
        utf8 = encodings.search_function('utf8')
        return codecs.CodecInfo(
            name='cpreprocessor',
            encode=utf8.encode,
            decode=cpreprocessor_decode,
            incrementalencoder=utf8.incrementalencoder,
            incrementaldecoder=utf_8.IncrementalDecoder,
            streamreader=utf_8.StreamReader,
            streamwriter=utf8.streamwriter)


codecs.register(search_function)


К сожалению, отладчик и вывод print показывают, что отрабатывает только последняя строка и потому никаких замен в коде не происходит!

В Main- файле я в заголовках указал:
import General.cpreprocessor # тут происходит регистрация и единственный раз я попадаю  в модуль cpreprocessor
# coding: сpreprocessor #ничего не происходит!


В модуле открытия главного окна (которое отлично открывается, а значит код из него работает), то есть строка:
# coding: сpreprocessor #ничего не происходит!


Но отладчик не заходит в функции замены строк и потому магия замены комментария на код не происходит.
Что я делаю не так?
8 фев 19, 16:53    [21804642]     Ответить | Цитировать Сообщить модератору
 Re: Python: Пытаюсь реализовать препроцессор  [new]
AlekseySQL
Member [заблокирован]

Откуда:
Сообщений: 952
В первом примере кода немного ошибся: функция называется log
а(42) #! MyLoger.log('Вызов функции a')
8 фев 19, 17:00    [21804663]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить