консольный вывод os.system()?

При вызове os.system() в интерактивном интерпретаторе вы можете увидеть, что он выводит в консоли. Но в моем случае мне нужно было изменить sys.stderr и sys.stdout на экземпляр другого класса, а функция os.system вызывается в операторе exec. Проблема в том, что я не вижу, что он выводит. Он не пишет ни в stderr, ни в stdout. Итак, мой вопрос: куда идет печатный вывод os.system()?

Спасибо, Никлас


person Niklas R    schedule 22.07.2011    source источник


Ответы (1)


Он переходит к файловому дескриптору 1 или 2, в зависимости от того, выводится ли он на стандартный вывод или на стандартный вывод. Если вам нужен более точный контроль над выводом, используйте subprocess.

person Ignacio Vazquez-Abrams    schedule 22.07.2011
comment
Но он не переходит в stdout или stderr, я не вижу его в своем окне вывода. Но модуль подпроцесса кажется очень полезным для этого! Спасибо ! - person Niklas R; 22.07.2011
comment
Но я вижу, мой собственный файловый класс не поддерживает метод fileno(). Есть ли способ обойти это? - person Niklas R; 22.07.2011
comment
Создайте канал с помощью os.pipe() и используйте select, чтобы увидеть, есть ли какие-либо данные для чтения из него. - person Ignacio Vazquez-Abrams; 22.07.2011