Подпроцесс Python, исчерпывающий файловые дескрипторы

У меня есть долго работающий проект python, который использует модуль подпроцесса для запуска различных других программ. Он ожидает завершения каждой программы, затем завершает функцию-оболочку и возвращается в свой цикл ожидания.

В конце концов, это приводит к полной остановке компьютера, на котором он работает, с ошибкой, что больше нет доступных дескрипторов файлов.

Я не могу найти нигде в документации подпроцесса , что происходит с файловыми дескрипторами при закрытии дочернего процесса. Сначала я думал, что они закроются автоматически, так как команда subprocess.call () ждет, пока дочерний элемент не завершится.

Но если бы это было так, у меня не было бы проблем. Я также подумал, что если что-то останется, python соберет это мусором, когда функция завершится, и дескрипторы файлов выйдут за пределы области видимости. Но, похоже, это тоже не так.

Как мне получить доступ к этим файловым дескрипторам? функция subprocess.call () возвращает только код выхода, но не дескрипторы открытых файлов. Что мне здесь еще не хватает?

Этот проект действует как связующее звено между различными корпоративными приложениями. Указанные приложения нельзя конвейеризовать, и они являются системами графического интерфейса. Итак, единственное, что я могу сделать, это запустить их с помощью встроенных макросов. Эти макросы выводят текстовые файлы, которые я использую для следующей программы в конвейере.

Да, это так плохо, как кажется. К счастью, все файлы имеют довольно уникальные имена. Итак, в ближайшие несколько дней я буду использовать инструмент sys internals, предложенный ниже, чтобы попытаться отследить файл. Я дам вам знать, как это получается.

Большинство файлов я не открываю, я просто перемещаю их с помощью функции win32file.CopyFile ().

6
задан Spencer Rathbun 13 July 2011 в 15:36
поделиться