我发现
input('some\x00 text')
将提示输入 some
而不是 some text
。
根据消息来源,我已经了解到这个函数使用 C 函数 PyOS_Readline
,它忽略空字节后的提示信息。
来自 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
这是一个bug吗,还是有其他原因?
print('some\0 text')
将打印出some text
。 - Kostya Cholakreadline()
,而readline()
是用C编写的,因此遵循C规则。 Python将整个字符串“ some\x00 text”传递给readline()
,然后readline()
将其截断。 - BoarGulesreadline
函数必须知道提示符,以便于每当readline
需要时(这经常发生)可以重新打印它。对于提示符本身的另一个选项是让Python删除空字符并将剩余部分传递给readline
,但我不确定这是否是一种改进。 - torek