Яка різниця між run і popen?

Загалом, варто використовувати запустити, якщо вам просто потрібно запустити команду та захопити її вихід, і Popen, якщо вам потрібно більше контролювати процес, як-от взаємодія з його вхідними та вихідними потоками. 3 лютого 2023 р.

Рекомендованим підходом до виклику підпроцесів є використання функція run() для всіх випадків використання, які вона може обробляти. Для більш складних випадків використання базовий інтерфейс Popen можна використовувати безпосередньо.

ОПИС. Функція popen() має виконати команду, визначену командою string. Він створює канал між викликаючою програмою та виконаною командою та повертає вказівник на потік, який можна використовувати для читання або запису в канал.

Основна відмінність полягає в тому, що підпроцес. run() виконує команду та чекає її завершення, поки виконується підпроцес. Popen ви можете продовжувати робити свої речі, поки процес завершиться, а потім просто кілька разів викликати Popen. communicate(), щоб передавати та отримувати дані вашому процесу.

виклик блокує. Хоча він підтримує ті самі аргументи, що й конструктор Popen, тому ви все ще можете встановлювати вихід процесу, змінні середовища тощо, ваш сценарій очікує на завершення програми, а виклик повертає код, що представляє статус виходу процесу. Як бачите, це тонка обгортка навколо Popen.

popen() застарів, починаючи з Python 2.6, але Python 3.0 видалив застаріле (зафіксувати dcf97b98ec5cad972b3a8b4989001c45da87d0ea, потім зафіксувати f5a429295d855267c33c5ef110fbf05ee7a3013e extended os.