ctypes ведут себя странно в интерпретаторе Python - PullRequest
4 голосов
/ 25 августа 2010

У меня смешная проблема с ctypes; хотя он, кажется, работает в обычных скриптах на python, когда я использую его в интерпретаторе с printf (), он печатает длину строки после самой строки. Демо:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> libc = CDLL("libc.so.6")
>>> libc.printf("Test")
Test4
>>> int = 55
>>> libc.printf("Test %d", int)
Test 557
>>> int = c_int(55)
>>> libc.printf("Test %d", int)
Test 557

Кто-нибудь знает, почему это происходит?

1 Ответ

8 голосов
/ 25 августа 2010

со страницы руководства printf (3):

После успешного возврата эти функции возвращают количество напечатанных символов (не включая завершающий ’\0’, используемый для завершения вывода в строки).

Интерпретатор python отображает код возврата printf() после его вызова. Так как у вас нет новой строки \n в конце ваших строк, длина печатается сразу после распечатки. Обратите внимание, что в сценарии этого не произойдет, только если вы используете Python в интерактивном режиме.

Вы можете скрыть это с помощью задания:

ret = libc.printf("Test\n")
...