Как раскрасить определенную символьную ячейку в python с помощью управляющих кодов ansi, где расположение символьной ячейки определяется переменными

#python #linux #cursor #ansi

#python #linux #курсор #ansi

Вопрос:

Я хотел бы иметь возможность раскрасить символьную ячейку в python, где цветная символьная ячейка определяется двумя переменными (одна для строки, одна для столбца).

Я пробовал синтаксический анализ строк и конкатенацию строк, но не могу понять, почему они не работают.

 sys.std(u"u033[%d;%dHu001b[47m33[0m" % (y, x))

code = 47
sys.stdout.write(u"u001b[81;23fu001b["   str(code)   "m "   RESET )
sys.stdout.write(u"u001b["   str(x)   ";23fu001b["   str(code)   "m " )
 

В первом из них говорится:
Ошибка синтаксиса: (ошибка юникода) кодек ‘unicodeescape’ не может декодировать байты в позиции 0-4: усеченный uXXXX escape

Вторая строка работает, она окрашивает символьную ячейку в строке 81 столбца 23 в серый цвет. Но третья строка выводит » u001b[47m» в строке 81 столбца 23 вместо вывода цветного пикселя.

Я не совсем понимаю, почему конкатенация строк работает для второй, а не для третьей. В идеале я хотел бы иметь возможность изменять значения 81 и 23 с помощью переменных, т.е. x и y.

Я размышлял об этом уже несколько часов и был бы признателен за некоторое понимание.

Ответ №1:

На python 3 строка 3 вашего кода работает без изменений. На python 2 вам необходимо преобразовать все строковые элементы в юникод :

 sys.stdout.write(u"u001b["   unicode(x)   u";23fu001b["   unicode(code)   u"m " )
 

Похоже, что в первой строке есть еще одна проблема с escape-последовательностью, поскольку u033 не является допустимым escape-символом.