В этом обсуждении о самом простом способе запуска процесса и отбрасывания его вывода я предложил следующий код:
with open('/dev/null', 'w') as dev_null:
subprocess.call(['command'], stdout=dev_null, stderr=dev_null)
Другой разработчик предложил эту версию:
subprocess.call(['command'], stdout=open('/dev/null', 'w'), stderr=STDOUT)
Мой программист на C ++ хочет сказать, что когда объекты освобождаются, это деталь реализации, поэтому, чтобы не оставлять файловый дескриптор открытым в течение неопределенного периода времени, я должен использовать with
.Но пара из ресурсов предполагает, что Python всегда или почти всегда использует подсчет ссылок для кода, подобного этому, и в этом случае дескриптор файла должен быть восстановлен, как только будет выполнено subprocess.call
и использованиеwith
не требуется.
(Я полагаю, что оставить дескриптор файла открытым для /dev/null
, в частности, вряд ли имеет значение, поэтому представьте, что это важный файл.)
Какой подход лучше?