python:调用函数序列

python:调用函数序列,python,ctypes,Python,Ctypes,上述代码的结果: from ctypes import cdll libc = cdll.msvcrt message = "Hello World!\n" length = libc.printf("Printing by msvcrt: %s", message) print length 为什么先打印字符串的长度,而不是字符串本身?您启动了两个独立的执行线程:一个在Python中,一个在C中(我过于简化了)。Python第一个完成了 实现这种效果的另一种方法是,在用print语句执行一

上述代码的结果:

from ctypes import cdll

libc = cdll.msvcrt
message = "Hello World!\n"
length = libc.printf("Printing by msvcrt: %s", message)
print length

为什么先打印字符串的长度,而不是字符串本身?

您启动了两个独立的执行线程:一个在Python中,一个在C中(我过于简化了)。Python第一个完成了


实现这种效果的另一种方法是,在用print语句执行一些非常简单(快速)的代码之后,用Python生成堆栈跟踪(执行错误)。堆栈跟踪可以与打印输出交错。

在输出
libc.printf()之后,需要调用
msvcr.fflush(None)


您正在使用两个独立的C运行时库实例
msvcrt.dll
以及Python链接到的任何版本。我的Python 2.7版本使用的是Visual Studio 2008中的
msvcr90.dll


这意味着有两个单独的缓冲标准输出实例,在您的例子中,Python的缓冲I/O在另一个实例之前刷新。我无法复制您脚本的输出。

我能够复制此。。可能与需要先编译的C函数有关,python打印被解释而不是编译?可能与否重复,它没有启动新线程。Python代码只是调用一个缓冲输出的C库函数。
33
Printing by msvcrt: Hello World!