Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: Пытаюсь реализовать препроцессор / 2 сообщений из 2, страница 1 из 1
08.02.2019, 16:53
    #39771262
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: Пытаюсь реализовать препроцессор
Хочу в комментариях, расположенных на той же строке после кода, писать код логирования, а чтобы не произошло путаницы такие комментарии начинать с последоательности #! Например:
Код: python
1.
а(42) #! MyLoger.lof('Вызов функции a')



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

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
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- файле я в заголовках указал:
Код: python
1.
2.
import General.cpreprocessor # тут происходит регистрация и единственный раз я попадаю  в модуль cpreprocessor
# coding: сpreprocessor #ничего не происходит!



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



Но отладчик не заходит в функции замены строк и потому магия замены комментария на код не происходит.
Что я делаю не так?
...
Рейтинг: 0 / 0
08.02.2019, 17:00
    #39771272
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python: Пытаюсь реализовать препроцессор
В первом примере кода немного ошибся: функция называется lo g
Код: python
1.
а(42) #! MyLoger.log('Вызов функции a')
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: Пытаюсь реализовать препроцессор / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]