Как преобразовать строку со специальными управляющими символами, например ‘x1b’, в стандартную строку?

#python #sockets

#python #сокеты

Вопрос:

Когда я использую программу сокета python, мы даем такую опцию, как:

 1) Input A to show your name
2) Input B to show your age
3) Input other to set your name

>>
  

Когда клиент вводит ‘Too’ кнопка удаления ‘m’, сервер получает ‘Too x1bm’.

Как мне преобразовать ‘Too x1bm’ в ‘Tom’ в Python?

Также могут быть другие управляющие символы, такие как ‘переместить курсор’ и ‘tab’.

Комментарии:

1. Это Python2? У меня нет проблемы ни в Python2, ни в Python3. Я на Mac.

2. Какую функцию вы используете для захвата входных данных? Использование input() или raw_input() на Python2 должно обрабатывать обратные пробелы, клавиши курсоров и т. Д. Просто отлично.

3. x1b является ли начало en.wikipedia.org/wiki/ANSI_escape_code — вам нужно будет написать функцию для анализа любого из них, который может сгенерировать ваша клиентская программа.

4. Программируя сокет, я не могу использовать функцию ввода или raw_input. можно использовать только sock.send sock.recv

5. Покажите код, который генерирует это.

Ответ №1:

Мое первое предположение было бы:

 line = 'Toox1bm'

if 'x1b' in line:
    while True:
        index = line.find('x1b')
        if index > 0:
            line = line[:index - 1]   line[index   1:]
        else:
            break

    line = line.replace('x1b', '')
  

Комментарии:

1. Есть ли библиотека для этого?

2. Windows ‘delete’ — это ‘x1b’

3. Mac ‘delete’ — это ‘ x7f’

4. Я не знаю о такой библиотеке.

Ответ №2:

Если вы знаете все «неправильные символы», вы можете использовать .replace для удаления ненужных частей.

 'Toox1bm'.replace(a[a.index('x1b')-1:a.index('x1b') 1],'')
returns >>> Tom
  

Комментарии:

1. Сервер получает ‘Toox1bm’ не в x1bm’

2. Я исправил это, чтобы удалить x1b’ и символ перед ним.