Я не могу придумать легкий путь. Стандартная ошибка процесса Python находится на более низком уровне, чем объект файла Python (C против Python).
Вы можете обернуть скрипт python во второй скрипт python и использовать subprocess.Popen. Также возможно, что вы можете использовать магию в одном сценарии:
import os
import subprocess
import sys
cat = subprocess.Popen("/bin/cat", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
os.close(sys.stderr.fileno())
os.dup2(cat.stdin.fileno(), sys.stderr.fileno())
А затем с помощью select.poll () регулярно проверяйте cat.stdout для поиска выходных данных.
Да, похоже, работает.
Проблема, которую я предвижу, заключается в том, что в большинстве случаев что-то, выводимое на stderr python, указывает, что оно собирается завершиться. Более обычный способ справиться с этим - использовать исключения.
--------- Edit
Каким-то образом я пропустил функцию os.pipe ().
import os, sys
r, w = os.pipe()
os.close(sys.stderr.fileno())
os.dup2(w, sys.stderr.fileno())
Тогда читайте из r