ctypes在Python解释器中表现得很奇怪

时间:2010-08-25 18:00:31

标签: python ctypes

我对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 个答案:

答案 0 :(得分:8)

来自printf(3)手册页:

  

成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的尾随’\0’)。

python解释器在您调用后显示返回代码printf()。由于您的字符串末尾没有换行符\n,因此打印输出后会立即打印长度。请注意,只有在交互式使用python时才会在脚本中发生这种情况。

您可以使用作业隐藏此内容:

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