使用C模块的Python执行顺序

时间:2010-06-16 14:18:07

标签: python ctypes

我正在尝试学习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'打印的文本首先出现,尽管被称为秒。

我无法想象这是预期的行为。无论如何,我可能是那里做错事的人,所以:

  • 我能做错什么?
  • 有没有办法解释这种行为?

1 个答案:

答案 0 :(得分:2)

看起来Python的stdout独立于C的stdout进行缓冲。您应该尝试对它们调用flush()以强制它们写入数据。