Python: когда использовать pty.fork () против os.fork ()

Я не уверен, следует ли использовать pty.fork() или os.fork() при os.fork() внешних фоновых процессов из моего приложения. (Например, шахматные двигатели)

Я хочу, чтобы порожденные процессы умирали, если родитель был убит, как при нерестах приложений в терминале.

Каковы взлеты и падения между двумя вилами?

3 Solutions collect form web for “Python: когда использовать pty.fork () против os.fork ()”

Детский процесс, созданный с помощью os.fork() наследует stdin / stdout / stderr от родительского процесса, а дочерний процесс, созданный с помощью pty.fork() , связан с новым псевдотерминалом. Вам понадобится более поздняя pty.fork() когда вы пишете такую ​​программу, как xterm: pty.fork() в родительском процессе возвращает дескриптор для управления терминалом дочернего процесса, чтобы вы могли визуально представлять данные из него и транслировать действия пользователя в последовательности ввода терминала.

Обновить:

На странице справки pty (7):

Процесс, который ожидает подключения к терминалу, может открыть подчиненный конец псевдотерминала и затем управляться программой, которая открыла главный конец. Все, что написано на главном конце, предоставляется процессу на ведомом конце, как если бы он вводился на терминале. Например, запись символа прерывания (обычно управления-C) на главное устройство приведет к генерированию сигнала прерывания (SIGINT) для группы процессов переднего плана, которая подключена к ведомому. И наоборот, все, что записано на подчиненный конец псевдотерминала, может быть прочитано процессом, который связан с главным концом.

Раньше я всегда использовал для этого модуль subprocess . Он обеспечивает хорошую api для связи с подпроцессами.

Вы можете использовать call(*popenargs, **kwargs) для блокировки их выполнения, и я считаю, что использование класса Popen может обрабатывать async-выполнение.

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

Что касается использования os.fork vs pty.fork , обе они зависят от платформы, и ни один из них не будет работать (или, по крайней мере, проверен) с окнами. Модуль pty , по-видимому, более ограничен из двух, читая документы. Основное различие заключается в аспекте псевдотерминала. Поэтому, если вы не хотите архивировать свой код таким образом, чтобы иметь возможность использовать модуль subprocess , я бы, вероятно, пошел с os.fork вместо pty.fork .

Псевдотермиалы ​​необходимы для некоторых приложений, которые действительно ожидают терминала. Интерактивная оболочка – один из этих примеров, но есть много других. Опция pty.fork не существует в качестве другого os.fork, а как конкретный API для использования псевдотерминала.

Python - лучший язык программирования в мире.