Twitter LinkedIn Facebook Адрес электронной почты
Отображает сообщения или включает или отключает функцию повторения команды. Если используется без параметров, echo отображает текущий параметр эха.
echo [<message>] echo [on | off]
Параметр | Описание |
---|---|
[on | off] | Включает или отключает функцию повторения команд. Повтор команды включен по умолчанию. |
<message> | Указывает текст, отображаемый на экране. |
/? | Отображение справки в командной строке. |
Команда echo <message>
особенно полезна при отключении эха . Чтобы отобразить сообщение длиной в несколько строк без каких-либо команд, можно включить несколько echo <message>
команд после команды echo off в пакетную программу.
После отключения echo командная строка не отображается в окне командной строки. Чтобы отобразить командную строку, введите echo on. ).
Чтобы отобразить текущий параметр эха , введите:
echo
Чтобы повторить пустую строку на экране, введите:
echo.
Примечание
Не включайте пробел до периода. В противном случае точка отображается вместо пустой строки.
Чтобы предотвратить повтор команд в командной строке, введите:
echo off
Примечание
Если функция echo отключена, командная строка не отображается в окне командной строки. Чтобы снова отобразить командную строку, введите echo on.
Чтобы все команды в пакетном файле (включая команду echo off ) не отображались на экране, в первой строке типа пакетного файла:
@echo off
Команду echo можно использовать как часть оператора if . Например, чтобы найти в текущем каталоге любой файл с расширением RPT и ввести сообщение, если такой файл найден, введите следующее:
if exist *. rpt echo The report has arrived.
Следующий пакетный файл ищет в текущем каталоге файлы с расширением имени файла .txt и отображает сообщение с указанием результатов поиска:
@echo off if not exist *.txt ( echo This directory contains no text files. ) else ( echo This directory contains the following text files: echo. dir /b *.txt )
Если при запуске пакетного файла .txt файлы не найдены, отображается следующее сообщение:
This directory contains no text files.
При обнаружении .txt файлов при запуске пакетного файла отображаются следующие выходные данные (в этом примере предполагается, что файлы File1.txt, File2.txt и File3.txt существуют):
This directory contains the following text files: File1.txt File2.txt File3.txt
Стандартные потоки ввода и вывода в Linux являются одним из наиболее распространенных средств для обмена информацией процессов, а перенаправление >, >> и | является одной из самых популярных конструкций командного интерпретатора.
В данной статье мы ознакомимся с возможностями перенаправления потоков ввода/вывода, используемых при работе файлами и командами.
Стандартный ввод при работе пользователя в терминале передается через клавиатуру.
Стандартный вывод и стандартная ошибка отображаются на дисплее терминала пользователя в виде текста.
Ввод и вывод распределяется между тремя стандартными потоками:
Потоки также пронумерованы:
Из стандартного ввода команда может только считывать данные, а два других потока могут использоваться только для записи. Данные выводятся на экран и считываются с клавиатуры, так как стандартные потоки по умолчанию ассоциированы с терминалом пользователя. Потоки можно подключать к чему угодно: к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением:
Стандартный входной поток обычно переносит данные от пользователя к программе. Программы, которые предполагают стандартный ввод, обычно получают входные данные от устройства типа клавиатура. Стандартный ввод прекращается по достижении EOF (конец файла), который указывает на то, что данных для чтения больше нет.
EOF вводится нажатием сочетания клавиш Ctrl+D.
Рассмотрим работу со стандартным выводом на примере команды cat (от CONCATENATE, в переводе «связать» или «объединить что-то»).
Cat обычно используется для объединения содержимого двух файлов.
Cat отправляет полученные входные данные на дисплей терминала в качестве стандартного вывода и останавливается после того как получает EOF.
cat
В открывшейся строке введите, например, 1 и нажмите клавишу Enter. На дисплей выводится 1. Введите a и нажмите клавишу Enter. На дисплей выводится a.
Дисплей терминала выглядит следующим образом:
test@111:~/stream$ cat 1 1 a a
Для завершения ввода данных следует нажать сочетание клавиш Ctrl + D.
Стандартный вывод записывает данные, сгенерированные программой. Когда стандартный выходной поток не перенаправляется в какой-либо файл, он выводит текст на дисплей терминала.
При использовании без каких-либо дополнительных опций, команда echo выводит на экран любой аргумент, который передается ему в командной строке:
echo Пример
Аргументом является то, что получено программой, в результате на дисплей терминала будет выведено:
Пример
При выполнении echo без каких-либо аргументов, возвращается пустая строка.
Команда объединяет три файла: file1, file2 и file3 в один файл bigfile:
cat file1 file1 file1 > bigfile
Команда cat по очереди выводит содержимое файлов, перечисленных в качестве параметров на стандартный поток вывода. Стандартный поток вывода перенаправлен в файл bigfile.
Стандартная ошибка записывает ошибки, возникающие в ходе исполнения программы. Как и в случае стандартного вывода, по умолчанию этот поток выводится на терминал дисплея.
Рассмотрим пример стандартной ошибки с помощью команды ls, которая выводит список содержимого каталогов.
При запуске без аргументов ls выводит содержимое в пределах текущего каталога.
Введем команду ls с каталогом % в качестве аргумента:
ls %
В результате должно выводиться содержимое соответствующей папки. Но так как каталога % не существует, на дисплей терминала будет выведен следующий текст стандартной ошибки:
ls: cannot access %: No such file or directory
Linux включает в себя команды перенаправления для каждого потока.
Команды со знаками > или < означают перезапись существующего содержимого файла:
Команды со знаками >> или << не перезаписывают существующее содержимое файла, а присоединяют данные к нему:
В приведенном примере команда cat используется для записи в файл file1, который создается в результате цикла:
cat > file1 a b c
Для завершения цикла нажмите сочетание клавиш Ctrl + D.
Если файла file1 не существует, то в текущем каталоге создается новый файл с таким именем.
Для просмотра содержимого файла file1 введите команду:
cat file1
В результате на дисплей терминала должно быть выведено следующее:
a b c
Для перезаписи содержимого файла введите следующее:
cat > file1 1 2 3
Для завершения цикла нажмите сочетание клавиш Ctrl + D.
В результате на дисплей терминала должно быть выведено следующее:
1 2 3
Предыдущего текста в текущем файле больше не существует, так как содержимое файла было переписано командой >.
Для добавления нового текста к уже существующему в файле с помощью двойных скобок >> выполните команду:
cat >> file1 a b cДля завершения цикла нажмите сочетание клавиш Ctrl + D.
Откройте file1 снова и в результате на дисплее монитора должно быть отражено следующее:
1 2 3 a b c
Каналы используются для перенаправления потока из одной программы в другую. Стандартный вывод данных после выполнения одной команды перенаправляется в другую через канал. Данные первой программы, которые получает вторая программа, не будут отображаться. На дисплей терминала будут выведены только отфильтрованные данные, возвращаемые второй командой.
Введите команду:
ls | less
В результате каждый файл текущего каталога будет размещен на новой строке:
file1 file2 t1 t2
Перенаправлять данные с помощью каналов можно как из одной команды в другую, так и из одного файла к другому, а перенаправление с помощью > и >> возможно только для перенаправления данных в файлах.
Для сохранения имен файлов, содержащих строку «LOG», используется следующая команда:
dir /catalog | find "LOG" > loglist
Вывод команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле loglist в виде списка (например, Config.log, Logdat.svd и Mylog.bat).
При использовании нескольких фильтров в одной команде рекомендуется разделять их с помощью знака канала |.
Фильтры представляют собой стандартные команды Linux, которые могут быть использованы без каналов:
Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):
Если в качестве аргумента передается файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).
Команда tee, как правило, используется для просмотра выводимого содержимого при одновременном сохранении его в файл.
wc ~/stream | tee file2
Допускается перенаправление нескольких потоков в один файл:
ls -z >> file3 2>&1
В результате сообщение о неверной опции «z» в команде ls будет записано в файл t2, поскольку stderr перенаправлен в файл.
Для просмотра содержимого файла file3 введите команду
cat file3
В результате на дисплее терминала отобразиться следующее:
ls: invalid option -- 'z' Try 'ls --help' for more information.
Мы рассмотрели возможности работы с перенаправлениями потоков >, >> и |, использование которых позволяет лучше работать с bash-скриптами.
утра Кухлинг, Эрик С. Рэймонд
2,04
Abstract
В этом документе описывается, как использовать расширение curses
.
модуль для управления дисплеями в текстовом режиме.
Библиотека curses обеспечивает независимый от терминала экранный рисунок и средство управления клавиатурой для текстовых терминалов; такие терминалы включают VT100, консоль Linux и имитацию терминала по различным программам. Терминалы с дисплеем поддерживают различные коды управления для выполнения обычных операций, таких как перемещение курсора, прокрутка экран и стирание областей. Различные терминалы используют сильно различающиеся коды и часто имеют свои незначительные особенности.
В мире графических дисплеев может возникнуть вопрос: «Зачем?» Его верно, что терминалы с символьными ячейками являются устаревшей технологией, но есть ниши, в которых можно делать с ними причудливые вещи по-прежнему ценны. Одна ниша — малогабаритная или встроенная. Unix, которые не используют X-сервер. Другой — такие инструменты, как ОС установщики и конфигураторы ядра, которые, возможно, придется запускать перед любым доступна графическая поддержка.
Библиотека curses предоставляет достаточно базовую функциональность, предоставляя программист с абстракцией дисплея, содержащего несколько неперекрывающиеся окна текста. Содержимое окна может быть изменены различными способами — добавлением текста, его удалением, изменением его внешний вид — и библиотека curses выяснит, какие управляющие коды должны быть отправлены на терминал для получения правильного вывода. проклятия не предоставляет многих концепций пользовательского интерфейса, таких как кнопки, флажки, или диалоги; если вам нужны такие функции, подумайте о библиотеке пользовательского интерфейса, такой как Урвид.
Библиотека curses изначально была написана для BSD Unix; более поздняя Система V версии Unix от AT&T добавили множество улучшений и новых функций. BSD проклятия больше не поддерживается, его заменили на ncurses, который является реализация интерфейса AT&T с открытым исходным кодом. Если вы используете Unix с открытым исходным кодом, например Linux или FreeBSD, ваша система почти наверняка использует проклятия. Поскольку большинство современных коммерческих версий Unix основаны на System V code, вероятно, будут доступны все описанные здесь функции. Старший версии curses, поддерживаемые некоторыми проприетарными Unix-системами, могут не поддерживать все, однако.
Версия Python для Windows не включает проклятия
модуль. Доступна портированная версия под названием UniCurses.
Модуль Python представляет собой довольно простую оболочку над функциями C, предоставляемыми
проклятия; если вы уже знакомы с программированием curses на C, это действительно
легко перенести эти знания на Python. Самая большая разница в том, что
Интерфейс Python упрощает работу за счет объединения различных функций C, таких как addstr()
, mvaddstr()
и mvwaddstr()
в один метод addstr()
. Вы увидите это более подробно
подробно позже.
Этот HOWTO представляет собой введение в написание текстовых программ с помощью проклятий. и Питон. Он не претендует на то, чтобы быть полным руководством по API curses; для см. раздел руководства по библиотеке Python, посвященный ncurses, и страницы руководства C. для нкурсов. Тем не менее, он даст вам основные идеи.
Прежде чем что-либо делать, необходимо инициализировать curses. Это делается
вызов функции initscr()
, которая определит
тип терминала, отправьте все необходимые коды настройки на терминал и
создавать различные внутренние структуры данных. В случае успеха, initscr()
возвращает объект окна, представляющий весь
экран; это обычно называется stdscr
после имени
соответствующую переменную C.
проклятий импорта stdscr = curses.initscr()
Обычно проклятые приложения отключают автоматическое повторение ключей на
экран, чтобы иметь возможность читать ключи и отображать их только под
определенные обстоятельства. Для этого необходимо вызвать функция noecho()
.
проклятия.noecho()
Приложения также обычно должны мгновенно реагировать на клавиши, без нажатия клавиши Enter; это называется cбрейк режим, в отличие от обычного буферизованного режима ввода.
проклятия.cbreak()
Терминалы обычно возвращают специальные клавиши, такие как клавиши управления курсором или клавиши навигации.
такие клавиши, как Page Up и Home, в виде многобайтовой управляющей последовательности. В то время как вы могли
напишите свое приложение, чтобы ожидать такие последовательности и обрабатывать их соответствующим образом,
curses может сделать это за вас, возвращая специальное значение, такое как проклятий.KEY_LEFT
. Чтобы проклятия выполняли свою работу, вам нужно включить
режим клавиатуры.
stdscr.keypad(Истина)
Завершить работу приложения curses намного проще, чем запустить его. Вам понадобиться звонить:
проклятия. nocbreak() stdscr.keypad (ложь) проклятия.эхо()
, чтобы изменить настройки дружественного к проклятиям терминала. Затем позвоните в функция endwin()
для восстановления исходного терминала
рабочий режим.
проклятия.endwin()
Распространенная проблема при отладке приложения curses — получить ваш терминал перепутались, когда приложение умирает, не восстанавливая терминал в его предыдущее состояние. В Python это обычно происходит, когда ваш код содержит ошибки и вызывает неперехваченное исключение. Клавиши больше не отображаются на экране, когда например, вы вводите их, что затрудняет использование оболочки.
В Python вы можете избежать этих сложностей и значительно упростить отладку,
импортировать функцию curses.wrapper()
и использовать ее следующим образом:
из обёртки импорта curses деф основной (stdscr): # Очисти экран stdscr.clear() # Это вызывает ZeroDivisionError, когда i == 10. для я в диапазоне (0, 11): v = i-10 stdscr. addstr(i, 0, '10 разделить на {} равно {}'.format(v, 10/v)) stdscr.refresh() stdscr.getkey() обертка (основная)
функция wrapper()
принимает вызываемый объект и выполняет
инициализации, описанные выше, а также инициализация цветов, если цвет
поддержка присутствует. wrapper()
затем запускает предоставленный вызываемый объект.
Как только вызываемый объект вернется, wrapper()
восстановит исходный
состояние терминала. Вызываемый объект вызывается внутри попробовать
… , кроме
, который перехватывает исключения, восстанавливает
состояние терминала, а затем повторно вызывает исключение. Поэтому
ваш терминал не будет оставаться в забавном состоянии в виде исключения, и вы будете
в состоянии прочитать сообщение об исключении и трассировку.
Windows — это основная абстракция в curses. Объект окна представляет собой прямоугольная область экрана и поддерживает методы отображения текста, стереть его, разрешить пользователю вводить строки и т. д.
Объект stdscr
, возвращаемый функцией initscr()
, является
объект окна, покрывающий весь экран. Многим программам может понадобиться
только это единственное окно, но вы можете разделить экран на
меньшие окна, чтобы перерисовывать или очищать их отдельно. функция newwin()
создает новое окно заданного размера,
возвращая новый объект окна.
начало_х = 20; начало_у = 7 высота = 5; ширина = 40 win = curses.newwin (высота, ширина, begin_y, begin_x)
Обратите внимание, что в curses используется необычная система координат. Координаты всегда передаются в порядке y,x , а верхний левый угол окна является координатой (0,0). Это нарушает нормальный соглашение по работе с координатами, где берется координата x первый. Это досадное отличие от большинства других компьютеров. приложений, но он был частью проклятий с тех пор, как он был впервые написан, а сейчас уже поздно что-то менять.
Ваше приложение может определять размер экрана с помощью curses. LINES
и curses.COLS
переменных для получения y и
Размер x . Юридические координаты будут расширены от (0,0)
до (curses.LINES - 1, curses.COLS - 1)
.
При вызове метода для отображения или удаления текста эффект не
сразу появляются на дисплее. Вместо этого вы должны вызвать refresh()
метод оконных объектов для обновления
экран.
Это потому, что проклятия изначально были написаны с медленной скоростью 300 бод.
терминальные соединения в виду; с этими клеммами, сводя к минимуму
время, необходимое для перерисовки экрана, было очень важно. Вместо проклятий
накапливает изменения на экране и отображает их в наиболее
эффективным способом при вызове refresh()
. Например, если ваш
программа отображает некоторый текст в окне, а затем очищает окно,
нет необходимости отправлять исходный текст, потому что они никогда не
видимый.
На практике явное указание curses перерисовывать окно не работает. действительно сильно усложняют программирование с проклятиями. Большинство программ идут в шквал
активности, а затем сделать паузу в ожидании нажатия клавиши или какого-либо другого действия на
часть пользователя. Все, что вам нужно сделать, это убедиться, что экран
перерисовывается перед паузой в ожидании ввода пользователя, сначала вызывая stdscr.refresh()
или метод refresh()
какого-либо другого соответствующего
окно.
Накладка — это частный случай окна; он может быть больше, чем фактический дисплей экрана, и одновременно отображается только часть пэда. Создание площадки требуется высота и ширина пэда, в то время как обновление пэда требует предоставления координаты области экрана, где будет находиться подраздел пэда отображается.
pad = curses.newpad(100, 100) # Эти циклы заполняют блокнот буквами; addch() это # объясняется в следующем разделе для y в диапазоне (0, 99): для x в диапазоне (0, 99): pad.addch(y,x, ord('a') + (x*x+y*y) % 26) # Отображает часть пэда в середине экрана. # (0,0) : координата левого верхнего угла области пэда для отображения. # (5,5) : координата левого верхнего угла области окна, которую необходимо заполнить # с содержимым пэда. # (20, 75) : координата нижнего правого угла области окна, которую нужно # : заполнено содержимым пэда. pad.refresh( 0,0, 5,5, 20,75)
Вызов refresh()
отображает часть площадки в прямоугольнике
расширение от координаты (5,5) до координаты (20,75) на экране; верхний
левый угол отображаемой секции является координатой (0,0) на клавиатуре. Вне
В этом отличие, прокладки точно такие же, как обычные окна, и поддерживают то же самое.
методы.
Если на экране несколько окон и панелей,
эффективный способ обновить экран и предотвратить раздражающее мерцание экрана
по мере обновления каждой части экрана. обновить()
на самом деле
делает две вещи:
Вызывает метод noutrefresh()
каждого окна
обновить базовую структуру данных, представляющую желаемую
состояние экрана.
Вызывает функцию doupdate()
для изменения
физический экран в соответствии с желаемым состоянием, записанным в структуре данных.
Вместо этого вы можете вызвать noutrefresh()
для нескольких окон, чтобы
обновить структуру данных, а затем вызвать doupdate()
для обновления
экран.
С точки зрения программиста на C проклятия иногда могут выглядеть как
извилистый лабиринт функций, все немного разные. Например, addstr()
отображает строку в текущем местоположении курсора в
окно stdscr
, в то время как mvaddstr()
перемещается к заданным y,x
координаты перед отображением строки. waddstr()
просто
как addstr()
, но позволяет указать окно для использования вместо
используя stdscr
по умолчанию. mvwaddstr()
позволяет указать оба
окно и координата.
К счастью, интерфейс Python скрывает все эти детали. стандартный код
является оконным объектом, как и любой другой, и такие методы, как addstr()
принимает несколько форм аргументов. Обычно там
являются четырьмя различными формами.
Форма | Описание |
---|---|
стр или ч | Показать строку str или символ ch at текущая позиция |
стр или ч , аттр | Показать строку str или символ ch , используя атрибут attr в текущем позиция |
у , х , стр или ч | Переместиться в позицию y,x в пределах окна и дисплей стр или ч |
y , x , стр или ч , аттр | Переместиться в позицию y,x в пределах окна и отобразить str или ch , используя атрибут attr |
Атрибуты позволяют отображать текст в выделенных формах, таких как полужирный, подчеркиванием, обратным кодом или цветом. Они будут объяснены более подробно в следующий подраздел.
Метод addstr()
принимает строку Python или
bytestring как отображаемое значение. Содержимое строк байтов
отправляются на терминал как есть. Строки кодируются в байты с помощью
значение атрибута окна encoding
; это по умолчанию
системная кодировка по умолчанию, возвращаемая локаль.getencoding()
.
Методы addch()
принимают символ, который может быть
либо строка длины 1, строка байтов длины 1, либо целое число.
Предусмотрены константы для символов расширения; эти константы
целые числа больше 255. Например, ACS_PLMINUS
— это +/-
символ, а ACS_ULCORNER
— левый верхний угол поля
(удобно для рисования границ). Вы также можете использовать соответствующий Unicode
характер.
Windows запоминает, где находился курсор после последней операции, поэтому, если вы
опустите координаты y,x , будет отображаться строка или символ
там, где закончилась последняя операция. Вы также можете перемещать курсор с помощью метод перемещения (y, x)
. Поскольку некоторые терминалы всегда отображают мигающий курсор,
вы можете захотеть убедиться, что курсор находится в каком-то месте, где он
не будет отвлекать; может сбить с толку мигание курсора
видимо случайное место.
Если вашему приложению вообще не нужен мигающий курсор, вы можете
вызовите curs_set(False)
, чтобы сделать его невидимым. Для совместимости
в старых версиях curses есть функция leaveok(bool)
это синоним curs_set()
. Когда bool истинно,
библиотека curses попытается подавить мигающий курсор, и вы
не нужно будет беспокоиться о том, чтобы оставить его в нечетных местах.
Символы могут отображаться по-разному. Строки состояния в текстовом приложения обычно отображаются в обратном видео, или программе просмотра текста может потребоваться выделить определенные слова. curses поддерживает это, позволяя указать атрибут для каждой ячейки на экране.
Атрибут представляет собой целое число, каждый бит которого представляет атрибут. Вы можете попробовать отобразить текст с несколькими битами атрибута установлен, но curses не гарантирует, что все возможные комбинации доступны, или что все они визуально различны. Это зависит от возможности используемого терминала, поэтому безопаснее придерживаться наиболее часто доступные атрибуты, перечисленные здесь.
Атрибут | Описание |
---|---|
| Мигающий текст |
| Очень яркий или жирный текст |
| Полуяркий текст |
| Текст обратного видео |
| Лучший доступный режим выделения |
| Подчеркнутый текст |
Итак, чтобы отобразить строку состояния обратного видео в верхней строке экрана, вам может код:
stdscr. addstr(0, 0, "Текущий режим: режим ввода", проклятия.A_REVERSE) stdscr.refresh()
Библиотека curses также поддерживает цвет на тех терминалах, которые его предоставляют. наиболее распространенным таким терминалом, вероятно, является консоль Linux, за которой следует цвет xterms.
Чтобы использовать цвет, вы должны вскоре вызвать функцию start_color() после вызова initscr()
для инициализации набора цветов по умолчанию
(функция curses.wrapper()
делает это автоматически). Как только это
сделано, функция has_colors()
возвращает TRUE, если терминал
в использовании может
фактически отображать цвет. (Примечание: в curses используется американское написание «цвет»,
вместо канадско-британского написания «цвет». Если вы привыкли к
Британская орфография, вам придется смириться с опечатками ради нее.
этих функций.)
Библиотека curses поддерживает конечное число цветовых пар, содержащих
цвет переднего плана (или текста) и цвет фона. Вы можете получить атрибут
значение, соответствующее паре цветов с color_pair()
функция; это может быть побитовое ИЛИ с другими атрибутами, такими как A_REVERSE
, но опять же, такие комбинации не гарантируют работу
на всех терминалах.
Пример отображения строки текста с использованием пары цветов 1:
stdscr.addstr("Красивый текст", curses.color_pair(1)) stdscr.refresh()
Как я уже говорил, цветовая пара состоит из цвета переднего плана и цвета фона.
Функция init_pair(n, f, b)
изменяет определение пары цветов n на
цвет переднего плана f и цвет фона b. Цветовая пара 0 жестко связана с белым
на черном и не может быть изменено.
Цвета пронумерованы, и start_color()
инициализирует 8 основных
цвета, когда он активирует цветовой режим. Это: 0: черный, 1: красный,
2: зеленый, 3: желтый, 4: синий, 5: пурпурный, 6: голубой и 7: белый. проклятия
модуль определяет именованные константы для каждого из этих цветов: curses. COLOR_BLACK
, curses.COLOR_RED
и так далее.
Давайте соберем все это вместе. Чтобы изменить цвет 1 на красный текст на белом фон, звоните:
curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)
При изменении пары цветов любой текст, уже отображаемый с использованием этой пары цветов изменится на новые цвета. Вы также можете отображать новый текст в этом цвете с:
stdscr.addstr(0,0, "КРАСНАЯ ТРЕВОГА!", curses.color_pair(1))
Очень причудливые терминалы могут изменить определения фактических цветов на заданные
Значение RGB. Это позволяет изменить цвет 1, обычно красный, на фиолетовый или
синий или любой другой цвет, который вам нравится. К сожалению, консоль Linux не
поддерживают это, поэтому я не могу попробовать это и не могу привести никаких примеров. Ты
можете проверить, может ли ваш терминал сделать это, позвонив can_change_color()
, который возвращает True
, если возможность
там. Если вам посчастливилось иметь такой талантливый терминал, проконсультируйтесь с вашим
справочные страницы системы для получения дополнительной информации.
Библиотека C curses предлагает только очень простые механизмы ввода. питона
Модуль curses
добавляет базовый виджет ввода текста. (Другие библиотеки
такие как Урвид имеют более обширные
коллекции виджетов.)
Существует два способа ввода данных из окна:
получить ()
обновляет экран и ждет
пользователь нажимает клавишу, отображая клавишу, если echo()
был
звонил раньше. Вы можете дополнительно указать координату, к которой
курсор должен быть перемещен перед паузой.
getkey()
делает то же самое, но преобразует
целое число в строку. Отдельные символы возвращаются как
1-символьные строки и специальные клавиши, такие как функциональные клавиши, возвращаются
более длинные строки, содержащие имя ключа, например KEY_UP 9Г
.
Можно не ждать пользователя с помощью nodelay()
оконный метод. После nodelay(True)
, getch()
и getkey()
для окна становятся
неблокирующий. Чтобы сообщить, что ввод не готов, getch() возвращает
curses.ERR
(значение -1) и getkey()
вызывают исключение.
Существует также функция halfdelay()
, которую можно использовать для (в
эффект) установить таймер на каждые получить()
; если вход не становится
доступны в течение заданной задержки (измеряемой в десятых долях секунды),
curses вызывает исключение.
Метод getch()
возвращает целое число; если оно находится в диапазоне от 0 до 255, это
представляет собой код ASCII нажатой клавиши. Значения больше 255
специальные клавиши, такие как Page Up, Home или клавиши управления курсором. Вы можете сравнить
значение, возвращаемое константам, таким как curses.KEY_PPAGE
, curses. KEY_HOME
или curses.KEY_LEFT
. Основная петля
ваша программа может выглядеть примерно так:
, пока верно: c = stdscr.getch() если c == ord('p'): ПечатьДокумента() Элиф с == ord('q'): break # Выход из цикла while Элиф с == проклятия.KEY_HOME: х = у = 0
Модуль curses.ascii
предоставляет функции принадлежности к классу ASCII, которые
принимать либо целые числа, либо 1-символьные строковые аргументы; они могут быть полезны в
написание более читаемых тестов для таких циклов. Он также поставляет
функции преобразования, которые принимают целые числа или односимвольные аргументы
и вернуть тот же тип. Например, curses.ascii.ctrl()
возвращает
управляющий символ, соответствующий его аргументу.
Существует также метод получения всей строки, getstr()
. Используется не так часто, потому что
функциональность весьма ограничена; доступны только клавиши редактирования
клавишу Backspace и клавишу Enter, которая завершает строку. Это
опционально может быть ограничен фиксированным количеством символов.
curses.echo() # Включить отображение символов # Получить строку из 15 символов с курсором в верхней строке с = stdscr.getstr (0,0, 15)
Модуль curses.textpad
предоставляет текстовое поле, поддерживающее
Emacs-подобный набор сочетаний клавиш. Различные методы Textbox
class поддерживает редактирование с вводом
проверка и сбор результатов редактирования с или без
конечные пробелы. Вот пример:
проклятий импорта из curses.textpad импортировать текстовое поле, прямоугольник деф основной (stdscr): stdscr.addstr(0, 0, "Введите сообщение IM: (нажмите Ctrl-G для отправки)") editwin = проклятия.newwin(5,30, 2,1) прямоугольник(stdscr, 1,0, 1+5+1, 1+30+1) stdscr.refresh() поле = текстовое поле (editwin) # Разрешить пользователю редактировать, пока не будет нажата Ctrl-G. поле.редактировать() # Получить результирующее содержимое сообщение = box. gather()
Дополнительные сведения см. в документации библиотеки по адресу curses.textpad
.
Этот HOWTO не охватывает некоторые дополнительные темы, такие как чтение
содержимое экрана или захват событий мыши из xterm
например, но страница библиотеки Python для модуля curses
теперь
достаточно полно. Вы должны просмотреть его дальше.
Если вы сомневаетесь в детальном поведении проклятий
функций, обратитесь к справочным страницам для реализации curses,
будь то ncurses или проприетарный поставщик Unix. Страницы руководства
задокументирует любые причуды и предоставит полные списки всех
функции, атрибуты и ACS_*
символов, доступных для
ты.
Поскольку API curses очень большой, некоторые функции не поддерживаются в интерфейс Python. Часто это не потому, что их трудно реализовать, а потому, что они еще никому не нужны. Кроме того, Питон еще не поддерживает библиотеку меню, связанную с ncurses. Патчи, добавляющие поддержку для них, приветствуются; видеть Руководство разработчика Python для узнайте больше об отправке исправлений в Python.
Написание программ с помощью NCURSES: длинный учебник для программистов C.
Справочная страница ncurses
Часто задаваемые вопросы о ncurses
«Используйте проклятия… не ругайтесь»: видео выступления PyCon 2013 об управлении терминалами с помощью curses или Urwid.
«Консольные приложения с Urwid»: видео доклада PyCon CA 2012, демонстрирующего некоторые приложения, написанные с использованием Урвид.
Если ваш Mac работает, но подключенный к нему внешний дисплей имеет пустой или черный экран (нет видео) или не может использовать самое высокое разрешение или частоту обновления, попробуйте эти решения.
Убедитесь, что кабель питания внешнего дисплея и видеокабель надежно и правильно подключены с обоих концов. Узнайте больше о том, как подключить дисплей к вашему Mac.
Ваш внешний дисплей будет темным или будет использовать более низкое разрешение или частоту обновления, если ваш видеокабель или любой адаптер, который вы можете использовать с ним, не поддерживает разрешение и частоту обновления дисплея. Если вы используете адаптер Thunderbolt или USB-C, он также должен быть совместим с альтернативным режимом DisplayPort, Thunderbolt 3 или Thunderbolt 4.
Если дисплей подключен к портативному компьютеру Mac с закрытой крышкой, убедитесь, что Mac подключен к источнику питания и использует внешнюю клавиатуру и мышь.
Внешний дисплей будет темным, если он превысит максимальное число внешних дисплеев, которые ваш Mac может использовать одновременно. Это ограничение зависит от модели Mac.
Внешний дисплей будет темным или будет использовать более низкое разрешение или частоту обновления, если вы настроите его на превышение максимально поддерживаемого разрешения или частоты обновления. Это ограничение зависит от модели Mac, дисплея, видеокабеля и адаптера, используемых с дисплеем, а также разрешения и частоты обновления других подключенных дисплеев. Узнайте, что делать, если ваш экран стал темным после того, как вы изменили его разрешение или частоту обновления.
Чтобы узнать, сколько внешних дисплеев поддерживает ваш Mac, а также при каких разрешениях и частотах обновления, ознакомьтесь со спецификациями вашей модели Mac:
будет темно. Используйте один или несколько из этих шагов, чтобы попытаться еще раз обнаружить ваш дисплей.
Если внешний дисплей темный, убедитесь, что его яркость не была уменьшена.
Программное обеспечение может повлиять на обнаружение дисплея, качество изображения на вашем дисплее, а также разрешение и частоту обновления, доступные для вашего дисплея.
Информация о продуктах, не производимых Apple, или о независимых веб-сайтах, не контролируемых и не тестируемых Apple, предоставляется без рекомендации или одобрения. Apple не несет ответственности за выбор, работу или использование сторонних веб-сайтов или продуктов. Apple не делает никаких заявлений относительно точности или надежности сторонних веб-сайтов. Свяжитесь с продавцом для получения дополнительной информации.