8-900-374-94-44
[email protected]
Slide Image
Меню

Вывод текста на экран c: Вывод информации на экран в Си.

echo (вывод на экран) | Microsoft Learn

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Отображает сообщения или включает или отключает функцию повторения команды. Если используется без параметров, 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 — Блог компании Селектел

Введение

Стандартные потоки ввода и вывода в Linux являются одним из наиболее распространенных средств для обмена информацией процессов, а перенаправление >>> и | является одной из самых популярных конструкций командного интерпретатора.

В данной статье мы ознакомимся с возможностями перенаправления потоков ввода/вывода, используемых при работе файлами и командами.

Требования

  • Linux-система, например, Ubuntu 20.04

Потоки

Стандартный ввод при работе пользователя в терминале передается через клавиатуру.

Стандартный вывод и стандартная ошибка отображаются на дисплее терминала пользователя в виде текста.

Ввод и вывод распределяется между тремя стандартными потоками:

  • stdin — стандартный ввод (клавиатура),
  • stdout — стандартный вывод (экран),
  • stderr — стандартная ошибка (вывод ошибок на экран).

Потоки также пронумерованы:

  • stdin — 0,
  • stdout — 1,
  • stderr — 2.

Из стандартного ввода команда может только считывать данные, а два других потока могут использоваться только для записи. Данные выводятся на экран и считываются с клавиатуры, так как стандартные потоки по умолчанию ассоциированы с терминалом пользователя. Потоки можно подключать к чему угодно: к файлам, программам и даже устройствам. В командном интерпретаторе bash такая операция называется перенаправлением:

  • < file — использовать файл как источник данных для стандартного потока ввода.
  • > file — направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — перезаписан сверху.
  • 2> file — направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — перезаписан сверху.
  • >>file — направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец.
  • 2>>file — направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец.
  • &>file или >&file — направить стандартный поток вывода и стандартный поток ошибок в файл. Другая форма записи: >file 2>&1.

Стандартный ввод

Стандартный входной поток обычно переносит данные от пользователя к программе. Программы, которые предполагают стандартный ввод, обычно получают входные данные от устройства типа клавиатура. Стандартный ввод прекращается по достижении 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 включает в себя команды перенаправления для каждого потока.

Команды со знаками > или < означают перезапись существующего содержимого файла:

  • > — стандартный вывод,
  • < — стандартный ввод,
  • 2> — стандартная ошибка.

Команды со знаками >> или << не перезаписывают существующее содержимое файла, а присоединяют данные к нему:

  • >> — стандартный вывод,
  • << — стандартный ввод,
  • 2>> — стандартная ошибка.

Пример

В приведенном примере команда 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, которые могут быть использованы без каналов:

  • find — возвращает файлы с именами, которые соответствуют передаваемому аргументу.
  • grep — возвращает только строки, содержащие (или не содержащие) заданное регулярное выражение.
  • tee — перенаправляет стандартный ввод как стандартный вывод и один или несколько файлов.
  • tr — находит и заменяет одну строку другой.
  • wc — подсчитывает символы, линии и слова.

Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):

  • cat — считывает данные со стандартного потока ввода и передает их на стандартный поток вывода. Без опций работает как простой повторитель. С опциями может фильтровать пустые строки, нумеровать строки и делать другую подобную работу.
  • head — показывает первые 10 строк (или другое заданное количество), считанных со стандартного потока ввода.
  • tail — показывает последние 10 строк (или другое заданное количество), считанные со стандартного потока ввода. Важный частный случай tail -f, который в режиме слежения показывает концовку файла. Это используется, в частности, для просмотра файлов журнальных сообщений.
  • cut — вырезает столбец (по символам или полям) из потока ввода и передает на поток вывода. В качестве разделителей полей могут использоваться любые символы.
  • sort — сортирует данные в соответствии с какими-либо критериями, например, арифметически по второму столбцу.
  • uniq — удаляет повторяющиеся строки. Или (с ключом -с) не просто удалить, а написать сколько таких строк было. Учитываются только подряд идущие одинаковые строки, поэтому часто данные сортируются перед тем как отправить их на вход программе.
  • bc — вычисляет каждую отдельную строку потока и записывает вместо нее результат вычисления.
  • hexdump — показывает шестнадцатеричное представление данных, поступающих на стандартный поток ввода.
  • strings — выделяет и показывает в стандартном потоке (или файле) то, что напоминает строки. Всё что не похоже на строковые последовательности, игнорируется. Команда полезна в сочетании с grep для поиска интересующих строковых последовательностей в бинарных файлах.
  • sed — обрабатывает текст в соответствии с заданным скриптом. Наиболее часто используется для замены текста в потоке: sed s/было/стало/g.
  • awk — обрабатывает текст в соответствии с заданным скриптом. Как правило, используется для обработки текстовых таблиц, например, вывод ps aux и т.д.
  • sh -s — текст, который передается на стандартный поток ввода sh -s. может интерпретироваться как последовательность команд shell. На выход передается результат их исполнения.
  • ssh — средство удаленного доступа ssh, может работать как фильтр, который подхватывает данные, переданные ему на стандартный поток ввода, затем передает их на удаленный хост и подает на вход процессу программы, имя которой было передано ему в качестве аргумента. Результат выполнения программы (то есть то, что она выдала на стандартный поток вывода) передается со стандартного вывода ssh.

Если в качестве аргумента передается файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).

Пример

Команда tee, как правило, используется для просмотра выводимого содержимого при одновременном сохранении его в файл.

wc ~/stream | tee file2

Пример

Допускается перенаправление нескольких потоков в один файл:

ls -z >> file3 2>&1

В результате сообщение о неверной опции «z» в команде ls будет записано в файл t2, поскольку stderr перенаправлен в файл.

Для просмотра содержимого файла file3 введите команду 

cat:

cat file3

В результате на дисплее терминала отобразиться следующее:

ls: invalid option -- 'z'
Try 'ls --help' for more information.

Заключение

Мы рассмотрели возможности работы с перенаправлениями потоков >>> и |, использование которых позволяет лучше работать с bash-скриптами.

Curses Programming with Python — документация по Python 3.11.2

Автор

утра Кухлинг, Эрик С. Рэймонд

Выпуск

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

Модуль Python представляет собой довольно простую оболочку над функциями C, предоставляемыми проклятия; если вы уже знакомы с программированием curses на C, это действительно легко перенести эти знания на Python. Самая большая разница в том, что Интерфейс Python упрощает работу за счет объединения различных функций C, таких как addstr() , mvaddstr() и mvwaddstr() в один метод addstr() . Вы увидите это более подробно подробно позже.

Этот HOWTO представляет собой введение в написание текстовых программ с помощью проклятий. и Питон. Он не претендует на то, чтобы быть полным руководством по API curses; для см. раздел руководства по библиотеке Python, посвященный ncurses, и страницы руководства C. для нкурсов. Тем не менее, он даст вам основные идеи.

Запуск и завершение приложения curses

Прежде чем что-либо делать, необходимо инициализировать 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) на клавиатуре. Вне В этом отличие, прокладки точно такие же, как обычные окна, и поддерживают то же самое. методы.

Если на экране несколько окон и панелей, эффективный способ обновить экран и предотвратить раздражающее мерцание экрана по мере обновления каждой части экрана. обновить() на самом деле делает две вещи:

  1. Вызывает метод noutrefresh() каждого окна обновить базовую структуру данных, представляющую желаемую состояние экрана.

  2. Вызывает функцию 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 не гарантирует, что все возможные комбинации доступны, или что все они визуально различны. Это зависит от возможности используемого терминала, поэтому безопаснее придерживаться наиболее часто доступные атрибуты, перечисленные здесь.

Атрибут

Описание

A_BLINK

Мигающий текст

A_BOLD

Очень яркий или жирный текст

A_DIM

Полуяркий текст

A_REVERSE

Текст обратного видео

A_STANDOUT

Лучший доступный режим выделения

A_UNDERLINE

Подчеркнутый текст

Итак, чтобы отобразить строку состояния обратного видео в верхней строке экрана, вам может код:

 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, а также при каких разрешениях и частотах обновления, ознакомьтесь со спецификациями вашей модели Mac:

Определение вашего дисплея

будет темно. Используйте один или несколько из этих шагов, чтобы попытаться еще раз обнаружить ваш дисплей.

  • Отключите дисплей от компьютера Mac, а затем снова подключите его. Может помочь сначала выключить дисплей.
  • Переведите Mac в спящий режим, а затем разбудите его. На портативных компьютерах Mac вы можете закрыть крышку на несколько секунд, а затем снова открыть крышку.
  • Выберите меню Apple  > «Системные настройки» (или «Системные настройки»), затем нажмите «Мониторы». Нажмите и удерживайте клавишу Option, чтобы отобразить кнопку «Определить дисплеи», затем нажмите кнопку.
  • Перезагрузите Mac. Если вы не можете перезагрузить Mac, нажмите и удерживайте кнопку питания около 10 секунд, чтобы выключить его. Затем нажмите и отпустите кнопку питания, чтобы снова включить его.

Разрешить подключение дисплея

Проверить яркость дисплея

Если внешний дисплей темный, убедитесь, что его яркость не была уменьшена.

  • Если ваша клавиатура и внешний дисплей изготовлены Apple, вы можете использовать клавишу увеличения яркости на клавиатуре, чтобы увеличить яркость. Или выберите меню Apple () > «Системные настройки» (или «Системные настройки»), затем нажмите «Мониторы» и используйте там регулировку яркости.
  • Если ваш внешний дисплей произведен не Apple, вам может потребоваться использовать его встроенные элементы управления и систему меню для регулировки яркости. Если вы не можете этого сделать и ваш дисплей темный, возможно, на дисплей не подается питание или он неисправен.

Обновление программного обеспечения

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

  • Установите последние обновления macOS, которые также предоставляют обновления прошивки для дисплеев Apple.
  • Если ваш дисплей произведен не Apple, убедитесь, что на нем установлена ​​последняя версия прошивки от производителя. Подробную информацию см. в документации к дисплею или на веб-сайте производителя.

Если вам по-прежнему нужна помощь

Информация о продуктах, не производимых Apple, или о независимых веб-сайтах, не контролируемых и не тестируемых Apple, предоставляется без рекомендации или одобрения. Apple не несет ответственности за выбор, работу или использование сторонних веб-сайтов или продуктов. Apple не делает никаких заявлений относительно точности или надежности сторонних веб-сайтов. Свяжитесь с продавцом для получения дополнительной информации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *