Как закрасить определенную символьную ячейку в python, используя escape-коды ANSI, где местоположение символьной ячейки определяется переменными - PullRequest
0 голосов
/ 16 апреля 2019

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

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

sys.std(u"\u033[%d;%dH\u001b[47m\033[0m" % (y, x))

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

Первый говорит: SyntaxError: (ошибка Юникода) кодек unicodeescape не может декодировать байты в позиции 0-4: усеченный \ uXXXX escape

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

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

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

1 Ответ

0 голосов
/ 16 апреля 2019

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

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

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

...