Intereting Posts
Как установить разрешения для доступа к группе для чтения / выполнения Прочитать последний конец файла для восстановления данных Изменение определенных клавиш на клавиатуре Apple в Fedora 22 Настройка привязок ключей Gnome Shell из командной строки Невозможно apt-get со значением jessie-backports Как разрешения работают с графическим интерфейсом Настройка нового CentOS-сервера – размеры разделов и файловые системы Изменение переменной $ HOME в сценарии запуска сеанса: Gnome игнорирует его? Как создать небольшой образ диска с большими разделами Использование ЦП операций файловой системы, не показанных сверху Каков прогресс в улучшении производительности системы / реагирования во время ввода / вывода с высоким диском? Нажмите, когда активное меню не активирует действие Как установить CUDA Toolkit 7/8/9 на Debian 8 (Jessie) или 9 (Stretch)? Разрешение разрешений + w для подкаталога для группы пользователей без доступа к sudo Можно ли приостановить задания, отправленные через qsub?

Распечатывать двоичные данные, так как это не нарушает работу терминала

Я написал модуль Python для сбрасывания объектов. При использовании его с объектами, которые хранят двоичные данные (например, numpy.ndarray ) в терминале linux ( TERM=linux ), хотя распечатка данных приводит к нарушению шрифта терминала – видимо, некоторые символы обрабатываются как управляющие последовательности терминала. В Windows печать отлично работает даже в терминале mintty Cygwin (у нее есть TERM=xterm хотя).

То же самое происходит, когда я cat двоичный файл.

Конечно, я могу исправить это с помощью reset , но ценой потери результата, и это обычно неудобно. Хотя я знаю, что большинство, если не все контрольные символы имеют альтернативные графические представления в шрифтах (например, для CR , это ).

Итак, есть ли способ изменить исходный поток, чтобы заставить терминал linux обрабатывать специальные символы, которые были в нем, как литералы? В принципе, я хочу увидеть что-то вроде этого:

выборка двоичных данных образца

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

repr() не соответствует моим потребностям: она расширяет любые символы без печати и ASCII и в последовательности переменной длины, включая национальные буквы, в то время как цель дизайна модуля заключается в том, чтобы распечатка дампа была кратким и читаемым.

Программа showconsolefont может отображать 256 различных (или 512 различных …) глифов одновременно на консоли Linux. Но он делает это, используя системный вызов (который, случается, работает только для подключения к консольному устройству). На странице руководства не упоминается об этом.

Но глифы (которые используются для отображения символов) – это не то же самое, что символы . Вы будете отображать символ, распечатывая его на терминале, и терминал отображает это на глиф. Не существует escape-последовательности, которая может сообщить консоли Linux обрабатывать управляющие символы как пригодные для печати.

Например, showconsolefont фактически не пишет управляющие символы для ячеек 0-31. Он отображает печатаемые символы в диапазон 0-31, используя (как вы догадались) системный вызов.

Дальнейшее чтение:

  • Почему showconsolefont имеет разные выходные данные в tmux?

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

Информацию о том, как изменить программу Python для этого, можно найти, например, в этом вопросе stackoverflow.

В оболочке вы можете использовать, например, tr для преобразования управляющих символов в другие символы ASCII (хотя и не символы Unicode). См. Этот вопрос для альтернатив, которые могут использовать символы Unicode.

Unicode определяет группу Control Picture для отображения управляющих символов, например, возврат каретки . Если никогда не было слышно о представляющем CR, и если да, это просто случайно в некотором шрифте, который вы используете.

И в оболочке вы бы просто не использовали двоичный файл, а использовали hexdump -C или аналогично, чтобы изучить его.