2017-05-22 35 views
9

我發現Python的錯誤:在輸入提示空字節

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

這是一個bug或者有一個原因是什麼?

問題:http://bugs.python.org/issue30431

+0

最喜歡它是一個錯誤。 – ivand58

+2

它調用'readline','readline'本身使用C NUL終止的字符串數據類型,所以除了完全重新編碼'readline'之外,其他Python *不能完成的任務。 – torek

+0

謝謝@torek。我編輯了 –

回答

1

函數簽名非常需要NUL終止的C字符串,PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt),所以並不比可以搞定這個問題沒有與GNU的readline改變API和互操作性破。