Python Glossary English

все Python 3Linux · macOSosфункция

os.forkpty

os — создание процессов

Как fork, но потомок получает новый псевдотерминал (pty) как управляющий; возвращает (pid, fd). Доступно на Unix.

Синтаксис

os.forkpty(...)

Потомок получает новый псевдотерминал, поэтому программы внутри него ведут себя как в настоящем терминале: включают цвет, построчную буферизацию и задают вопросы. Родитель читает и пишет через возвращённый дескриптор. Для этого удобнее модуль pty, а для автоматизации диалога с программами — сторонний pexpect.

Примеры

import os
pid, fd = os.forkpty()   # → ? только Unix: в родителе (PID потомка, дескриптор мастер-конца pty), в потомке (0, -1)
if pid == 0: os.execvp('ls', ['ls', '-1'])   # → ? потомок подменяется командой; в отличие от os.fork() её stdin/stdout — настоящий терминал, поэтому работают программы, требующие tty
print(os.read(fd, 1024))   # → ? только в родителе: вывод потомка, например b'file1\r\nfile2\r\n' — в pty перевод строки приходит как \r\n
print(os.waitpid(pid, 0))   # → ? (PID потомка, 0) — команда отработала и завершилась с кодом 0
os.read(fd, 1024)   # → ? после завершения потомка на Linux: OSError [Errno 5] Input/output error, а не пустые байты

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности