все 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Сообщить о неточности