Это мой первый опыт программирования системы POSIX, так что я могу очень плохо понимать вещи.
Да.
Файловые дескрипторы POSIX - это просто числа - они не объекты, поэтому вы не можете переопределить их методы. Например, 0, 1 и 2 - все [обычно] допустимые файловые дескрипторы.
«соответствующие системные вызовы» встроены в ядро Linux. Само ядро Linux поддерживает список, который отображает файловые дескрипторы на некоторый внутренний объект ядра (у которого есть методы!), Но вы не можете вставить новый файловый дескриптор из Python. Код, выполняемый в пространстве ядра, сильно отличается от обычного кода («пользовательский режим»).
Могу ли я предложить вам взглянуть на subprocess.PIPE и либо на свойства stdout / stdin / stderr, либо на метод connect () объектов subprocess.Popen? Это позволит вам запустить подпроцесс, прочитать данные, которые он выводит, и иметь полный контроль над данными, которые ему отправляются. (Я думаю, это то, что вы действительно пытаетесь сделать ...). Если вам интересно, то, поиграв с этим, вы можете посмотреть на исходный код subprocess.py, чтобы увидеть, как он работает.
Вот пример подпроцесса. ТРУБА здесь .
В качестве альтернативы, если вы действительно хотите реализовать полную файловую систему на Python, посмотрите на FUSE , и это привязки Python . FUSE содержит модуль C, который работает в ядре и обрабатывает запросы файловой системы для определенного каталога. Он обрабатывает их, передавая их в пользовательскую программу, которая может быть написана на Python. Вы можете открыть эти файлы из отдельной программы Python, чтобы получить к ним файловый дескриптор. Это довольно сложно и, вероятно, не лучшее место для начинающего.