2017-05-22 47 views
9

BenPython hata: girdi isteminde null byte

input('some\x00 text') 

some yerine some text için isteyecektir saptadık.

Kaynaklardan, bu işlevin NULL baytından sonra gelen her şeyi yok sayan PyOS_Readline işlevini kullandığını öğrendim. PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) itibaren

:

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

Bu bir hata mı yoksa bunun için bir neden var mı?

Sayı: http://bugs.python.org/issue30431

+0

Çoğu bir hata gibidir. – ivand58

+2

'readline' ı çağırıyor ve' readline'ın kendisi C NUL sonlandırılmış string veri tipini kullanıyor, bu yüzden Python * 'un * readline'ı tamamen yeniden kodlamaktan başka yapabileceği küçük bir şey var. – torek

+0

Teşekkür ederim @torek. –

cevap

1

hemen hemen işlev imzası PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt), bir NUL sonlandırılmış C-string gerektirir, bu nedenle GNU taleb ile birlikte çalışabilirliği API değişen ve kırmadan bu konuda ne yapılabilir çok daha yoktur .