10

我发现

input('some\x00 text')

将提示输入some而不是some text.

从消息来源,我发现这个函数使用 C 函数PyOS_Readline,它会忽略 NULL 字节后提示的所有内容。

来自PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)

fprintf(stderr, "%s", prompt);

https://github.com/python/cpython/blob/3.6/Python/bltinmodule.c#L1989 https://github.com/python/cpython/blob/3.6/Parser/myreadline.c#L251

这是一个错误还是有原因?

问题:http ://bugs.python.org/issue30431

4

1 回答 1

2

函数签名几乎需要一个NUL终止的 C 字符串,PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)因此在不更改 API 并破坏与 GNU readline 的互操作性的情况下,没有什么比这更能做到的了。

于 2017-07-09T15:22:20.937 回答