Где выводится интерактивная подсказка «>>>» Python?

Я столкнулся с несколько необычной ситуацией. Я пытаюсь создать сценарий интерактивной консоли (для обучения / тестирования), и я попробовал следующее:

$ python > /dev/null Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print 3 >>> 

3 не печатается, поэтому ясно, что все остальное было на stderr . Все идет нормально. Но затем мы перенаправляем stderr :

 $ python 2> /dev/null >>> print 3 3 >>> 

Как можно распечатать приглашение в обоих случаях?

EDIT: перенаправление как stdout и stderr абсолютно ничего не печатает. Таким образом, Python явно «выбирает» один из stdout или stderr . Означает ли это, что это произошло? Я не мог понять, как это делается в исходном коде Python.

One Solution collect form web for “Где выводится интерактивная подсказка «>>>» Python?”

Кажется, что python проверяет, является ли stdout tty :

 /* This is needed to handle the unlikely case that the * interpreter is in interactive mode *and* stdin/out are not * a tty. This can happen, for example if python is run like * this: python -i < test1.py */ if (!isatty (fileno (sys_stdin)) || !isatty (fileno (sys_stdout))) rv = PyOS_StdioReadline (sys_stdin, sys_stdout, prompt); else rv = (*PyOS_ReadlineFunctionPointer)(sys_stdin, sys_stdout, prompt); 

Исходный код из строки Parser/myreadline.c вокруг строки 194.

Вполне возможно, что интерпретатор импортирует модуль readline при запуске, и в этом случае PyOS_ReadlineFunctionPointer будет настроен на call_readline , который использует библиотеку readline . В частности, он вызывает rl_callback_handler_install . Документация этой функции не указывает, где печатается запрос, но возможно, что он проверяет, являются ли stdout / stderr tty s.

Python - лучший язык программирования в мире.