bpo-14916: use specified tokenizer fd for file input (GH-31006)

@pablogsal, sorry i failed to rebase to main, so i recreated https://github.com/python/cpython/pull/22190#issuecomment-1024633392

> PyRun_InteractiveOne\*() functions allow to explicitily set fd instead of stdin.
but stdin was hardcoded in readline call.

> This patch does not fix target file for prompt unlike original bpo one : prompt fd is unrelated to tokenizer source which could be read only. It is more of a bugfix regarding the docs :  actual documentation say "prompt the user" so one would expect prompt to go on stdout not a file for both PyRun_InteractiveOne\*() and PyRun_InteractiveLoop\*().

Automerge-Triggered-By: GH:pablogsal
This commit is contained in:
Paul m. p. P 2022-02-01 23:33:52 +01:00 committed by GitHub
parent a0e55a571c
commit 89b13042fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 2 additions and 1 deletions

View File

@ -0,0 +1 @@
Fixed bug in the tokenizer that prevented ``PyRun_InteractiveOne`` from parsing from the provided FD.

View File

@ -855,7 +855,7 @@ tok_underflow_interactive(struct tok_state *tok) {
tok->done = E_INTERACT_STOP; tok->done = E_INTERACT_STOP;
return 1; return 1;
} }
char *newtok = PyOS_Readline(stdin, stdout, tok->prompt); char *newtok = PyOS_Readline(tok->fp ? tok->fp : stdin, stdout, tok->prompt);
if (newtok != NULL) { if (newtok != NULL) {
char *translated = translate_newlines(newtok, 0, tok); char *translated = translate_newlines(newtok, 0, tok);
PyMem_Free(newtok); PyMem_Free(newtok);