Документация Python неофициальный перевод

pty.md

74 строк · 4.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.2/library/pty.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 33.8. [`pty`](https://python-all.ru/3.2/library/pty.html#module-pty) – Утилиты псевдотерминала89*Платформы:* Linux1011Модуль [`pty`](https://python-all.ru/3.2/library/pty.html#module-pty) определяет операции для работы с псевдо-терминалом: запуск другого процесса и программную запись и чтение его управляющего терминала.1213Поскольку работа с псевдотерминалами сильно зависит от платформы, код для этого реализован только для Linux. (Предполагается, что код для Linux будет работать и на других платформах, но это ещё не проверено.)1415Модуль [`pty`](https://python-all.ru/3.2/library/pty.html#module-pty) определяет следующие функции:1617#### `pty.fork()`1819Fork. Подключает управляющий терминал дочернего процесса к псевдо-терминалу. Возвращаемое значение – `(pid, fd)`. Обратите внимание, что дочерний процесс получает *pid* 0, а *fd* является *недействительным*. Родительский процесс получает *pid* дочернего процесса, а *fd* – это файловый дескриптор, подключённый к управляющему терминалу дочернего процесса (а также к его стандартному вводу и выводу).2021#### `pty.openpty()`2223Открывает новую пару псевдо-терминалов, используя [`os.openpty()`](https://python-all.ru/3.2/library/os.html#os.openpty), если это возможно, или код эмуляции для обычных Unix-систем. Возвращает пару файловых дескрипторов `(master, slave)`, для ведущего и ведомого концов соответственно.2425#### `pty.spawn(argv[, master_read[, stdin_read]])`2627Создаёт процесс и подключает его управляющий терминал к стандартному вводу-выводу текущего процесса. Это часто используется, чтобы обмануть программы, которые настаивают на чтении из управляющего терминала.2829Функции *master\_read* и *stdin\_read* должны читать из файлового дескриптора. По умолчанию при каждом вызове читается 1024 байта.3031## 33.8.1. Пример3233Следующая программа действует как команда Unix *script(1)*, используя псевдотерминал для записи всего ввода и вывода сеанса терминала в «typescript».3435```python36import sys, os, time, getopt37import pty3839mode = 'wb'40shell = 'sh'41filename = 'typescript'42if 'SHELL' in os.environ:43    shell = os.environ['SHELL']4445try:46    opts, args = getopt.getopt(sys.argv[1:], 'ap')47except getopt.error as msg:48    print('%s: %s' % (sys.argv[0], msg))49    sys.exit(2)5051for opt, arg in opts:52    # опция -a: добавление в файл typescript53    if opt == '-a':54        mode = 'ab'55    # опция -p: использовать оболочку Python в качестве команды терминала56    elif opt == '-p':57        shell = sys.executable58if args:59    filename = args[0]6061script = open(filename, mode)6263def read(fd):64    data = os.read(fd, 1024)65    script.write(data)66    return data6768sys.stdout.write('Script started, file is %s\n' % filename)69script.write(('Script started on %s\n' % time.asctime()).encode())70pty.spawn(shell, read)71script.write(('Script done on %s\n' % time.asctime()).encode())72sys.stdout.write('Script done, file is %s\n' % filename)73```74