powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: Пытаюсь реализовать препроцессор
2 сообщений из 2, страница 1 из 1
Python: Пытаюсь реализовать препроцессор
    #39771262
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу в комментариях, расположенных на той же строке после кода, писать код логирования, а чтобы не произошло путаницы такие комментарии начинать с последоательности #! Например:
Код: 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
Python: Пытаюсь реализовать препроцессор
    #39771272
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В первом примере кода немного ошибся: функция называется lo g
Код: python
1.
а(42) #! MyLoger.log('Вызов функции a')
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Python: Пытаюсь реализовать препроцессор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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