> **Источник:** https://python-all.ru/3.1/library/msvcrt.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 32.2. `msvcrt` – Полезные подпрограммы из MS VC++ runtime

*Платформы:* Windows

Эти функции предоставляют доступ к некоторым полезным возможностям на платформах Windows. Некоторые модули более высокого уровня используют эти функции для создания реализаций своих служб для Windows. Например, модуль [`getpass`](https://python-all.ru/3.1/library/getpass.html#module-getpass) использует их в реализации функции `getpass()`.

Дополнительную документацию по этим функциям можно найти в документации Platform API.

Модуль реализует как обычный, так и широкосимвольный варианты API консольного ввода-вывода. Обычный API работает только с символами ASCII и имеет ограниченную пользу для интернационализированных приложений. Широкосимвольный API следует использовать везде, где это возможно.

## 32.2.1. Операции с файлами

#### `msvcrt.locking(fd, mode, nbytes)`

Блокирует часть файла на основе файлового дескриптора

*fd*

из среды C. Возбуждает

[`IOError`](https://python-all.ru/3.1/library/exceptions.html#IOError)

при неудаче. Заблокированная область файла начинается от текущей позиции файла и занимает

*nbytes*

байт; она может выходить за конец файла.

*mode*

должен быть одной из констант

`LK_*`

, перечисленных ниже. Несколько областей в одном файле могут быть заблокированы одновременно, но они не должны пересекаться. Смежные области не объединяются; их нужно разблокировать по отдельности.

#### `msvcrt.LK_LOCK`

#### `msvcrt.LK_RLCK`

Блокирует указанные байты. Если байты не удаётся заблокировать, программа немедленно повторяет попытку через 1 секунду. Если после 10 попыток байты не удаётся заблокировать, возбуждается

[`IOError`](https://python-all.ru/3.1/library/exceptions.html#IOError)

.

#### `msvcrt.LK_NBLCK`

#### `msvcrt.LK_NBRLCK`

Блокирует указанные байты. Если байты не удаётся заблокировать, возбуждается

[`IOError`](https://python-all.ru/3.1/library/exceptions.html#IOError)

.

#### `msvcrt.LK_UNLCK`

Разблокирует указанные байты, которые должны быть предварительно заблокированы.

#### `msvcrt.setmode(fd, flags)`

Устанавливает режим перевода концов строк для файлового дескриптора

*fd*

. Для текстового режима

*flags*

должен быть равен

[`os.O_TEXT`](https://python-all.ru/3.1/library/os.html#os.O_TEXT)

; для двоичного –

[`os.O_BINARY`](https://python-all.ru/3.1/library/os.html#os.O_BINARY)

.

#### `msvcrt.open_osfhandle(handle, flags)`

Создаёт файловый дескриптор среды выполнения C из дескриптора файла

*handle*

. Параметр

*flags*

должен быть побитовым ИЛИ от

[`os.O_APPEND`](https://python-all.ru/3.1/library/os.html#os.O_APPEND)

,

[`os.O_RDONLY`](https://python-all.ru/3.1/library/os.html#os.O_RDONLY)

и

[`os.O_TEXT`](https://python-all.ru/3.1/library/os.html#os.O_TEXT)

. Возвращённый файловый дескриптор можно использовать в качестве параметра

[`os.fdopen()`](https://python-all.ru/3.1/library/os.html#os.fdopen)

для создания файлового объекта.

#### `msvcrt.get_osfhandle(fd)`

Возвращает файловый дескриптор (handle) для файлового дескриптора

*fd*

. Возбуждает

[`IOError`](https://python-all.ru/3.1/library/exceptions.html#IOError)

, если

*fd*

не распознан.

## 32.2.2. Консольный ввод/вывод

#### `msvcrt.kbhit()`

Возвращает true, если нажатие клавиши ожидает чтения.

#### `msvcrt.getch()`

Считывает нажатие клавиши и возвращает результирующий символ. Ничего не выводится на консоль. Этот вызов блокируется, если нажатие ещё не доступно, но не ждёт нажатия

`Enter`

. Если нажатая клавиша была специальной функциональной клавишей, будет возвращён

`'\000'`

или

`'\xe0'`

; следующий вызов вернёт код клавиши. Нажатие клавиш

`Control-C`

не может быть считано этой функцией.

#### `msvcrt.getwch()`

Широкосимвольный вариант

[`getch()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.getch)

, возвращающий значение Unicode.

#### `msvcrt.getche()`

Аналогична

[`getch()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.getch)

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

#### `msvcrt.getwche()`

Широкосимвольный вариант

[`getche()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.getche)

, возвращающий значение Unicode.

#### `msvcrt.putch(char)`

Выводит символ

*char*

на консоль без буферизации.

#### `msvcrt.putwch(unicode_char)`

Широкосимвольный вариант

[`putch()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.putch)

, принимающий значение Unicode.

#### `msvcrt.ungetch(char)`

Заставляет символ

*char*

«вернуться обратно» в буфер консоли; он будет следующим символом, считываемым

[`getch()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.getch)

или

[`getche()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.getche)

.

#### `msvcrt.ungetwch(unicode_char)`

Широкосимвольный вариант

[`ungetch()`](https://python-all.ru/3.1/library/msvcrt.html#msvcrt.ungetch)

, принимающий значение Unicode.

## 32.2.3. Прочие функции

#### `msvcrt.heapmin()`

Принуждает кучу

`malloc()`

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

[`IOError`](https://python-all.ru/3.1/library/exceptions.html#IOError)

.
