It seems like python checks whether stdout
is a 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);
Sourcecode from Parser/myreadline.c
around line 194.
It's possible that the interpreter imports the readline
module at startup, in which case PyOS_ReadlineFunctionPointer
will be set to call_readline
, which uses the readline
library. In particular it calls rl_callback_handler_install
. The documentation of this function doesn't state where the prompt is printed, but it's possible that it checks whether stdout
/stderr
are tty
s.