#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-символом.