Разница между методами run и Popen в модуле subprocess заключается в следующем:
- Метод run запускает указанную программу и ждёт окончание её работы. 1 Параметры запускаемой программы указываются в виде элементов списка. 1 Метод возвращает результат как объект CompletedProcess. 1
- Метод Popen сразу после запуска указанного процесса возвращает управление, то есть запущенный процесс будет выполняться в фоновом режиме по отношению к родительскому процессу. 1 Метод возвращает объект Popen, который имеет ряд компонентов, например метод wait() ждёт завершение процесса, а с помощью poll() можно осуществлять опрос. 1
Таким образом, метод run используется для запуска программы и ожидания её завершения, а метод Popen позволяет продолжать работу до завершения процесса, а затем повторно вызывать метод Popen.communicate() для передачи и получения данных в процесс. 2