Spec-Zone.ru › Python 3.6

pty — Утилиты псевдотерминалов

Исходный код: Lib/pty.py

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

Поскольку обработка псевдотерминалов сильно зависит от платформы, код реализован только для Linux. (Код для Linux предполагается работоспособным на других платформах, но пока не был протестирован.)

Модуль pty определяет следующие функции:

pty.fork()

Функция fork. Подключает управляющий терминал дочернего процесса к псевдотерминалу. Возвращаемое значение — (pid, fd). Обратите внимание, что у дочернего процесса pid равен 0, а fd — недействителен. У родительского процесса возвращаемое значение — pid дочернего процесса, а fd — дескриптор файла, подключённый к управляющему терминалу дочернего процесса (а также к стандартному вводу и выводу дочернего процесса).

pty.openpty()

Открывает новую пару псевдотерминалов, используя os.openpty(), если это возможно, или код эмуляции для универсальных Unix-систем. Возвращает пару дескрипторов файлов (master, slave), для ведущего и ведомого концов, соответственно.

pty.spawn(argv[, master_read[, stdin_read]])

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

Функции master_read и stdin_read должны быть функциями чтения из дескриптора файла. По умолчанию они пытаются прочитать 1024 байта каждый раз, когда вызываются.

Изменено в версии 3.4: spawn() теперь возвращает значение статуса из os.waitpid() для дочернего процесса.

35.8.1. Пример

Следующая программа работает как команда Unix script(1), используя псевдотерминал для записи всего ввода и вывода сеанса терминала в «typescript».

import argparse
import os
import pty
import sys
import time

parser = argparse.ArgumentParser()
parser.add_argument('-a', dest='append', action='store_true')
parser.add_argument('-p', dest='use_python', action='store_true')
parser.add_argument('filename', nargs='?', default='typescript')
options = parser.parse_args()

shell = sys.executable if options.use_python else os.environ.get('SHELL', 'sh')
filename = options.filename
mode = 'ab' if options.append else 'wb'

with open(filename, mode) as script:
    def read(fd):
        data = os.read(fd, 1024)
        script.write(data)
        return data

    print('Script started, file is', filename)
    script.write(('Script started on %s\n' % time.asctime()).encode())

    pty.spawn(shell, read)

    script.write(('Script done on %s\n' % time.asctime()).encode())
    print('Script done, file is', filename)

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/pty.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API