我正在尝试学习python并遇到了一些奇怪的行为。我正在尝试使用ctypes和一个自制的(非常简单的)DLL。
这是我正在尝试运行的Python脚本:
from ctypes import *
myLib = CDLL("libDlltest")
myLib.hello()
myLib.goodbye()
print 'I am a line'
myLib.goodbye()
我根据this指南根据构建库配置了eclipse,当它不起作用时我用gcc在cygwin中构建它。
hello()和goodbye()实现为
EXPORT void hello(void) {
printf ("Hello\n");
}
EXPORT void goodbye(void) {
puts ("Goodbye");
}
(其中EXPORT是一个宏,您可以在上面的指南中详细了解)
然而,当我从程序得到的输出是:
时,它开始变得怪异I am a line
Hello
Goodbye
Goodbye
如果您没有注意到,打印输出的顺序不正确。 从库函数打印的文本出现在程序完成执行之后或之前,并且python'print'打印的文本首先出现,尽管被称为秒。
我无法想象这是预期的行为。无论如何,我可能是那里做错事的人,所以:
答案 0 :(得分:2)
看起来Python的stdout独立于C的stdout进行缓冲。您应该尝试对它们调用flush()以强制它们写入数据。