Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C模块的Python执行顺序_Python_Ctypes - Fatal编程技术网

使用C模块的Python执行顺序

使用C模块的Python执行顺序,python,ctypes,Python,Ctypes,我正在尝试学习python,遇到了一些奇怪的行为。我正在试验ctypes和一个自制的(非常简单的)DLL 这是我正在尝试运行的Python脚本: from ctypes import * myLib = CDLL("libDlltest") myLib.hello() myLib.goodbye() print 'I am a line' myLib.goodbye() 我已经根据《根据指南构建库》配置了eclipse,当它不起作用时,我使用gcc在cygwin中构建了它 hello()和

我正在尝试学习python,遇到了一些奇怪的行为。我正在试验ctypes和一个自制的(非常简单的)DLL

这是我正在尝试运行的Python脚本:

from ctypes import *
myLib = CDLL("libDlltest")
myLib.hello()
myLib.goodbye()

print 'I am a line'

myLib.goodbye()
我已经根据《根据指南构建库》配置了eclipse,当它不起作用时,我使用gcc在cygwin中构建了它

hello()和再见()实现为

EXPORT void hello(void) {
    printf ("Hello\n");
}

EXPORT void goodbye(void) {
    puts ("Goodbye");
}
(其中导出是一个宏,您可以在上面的指南中了解更多)

然而,当我从程序中得到的输出是:

I am a line
Hello
Goodbye
Goodbye
如果您没有注意到,打印输出的顺序不正确。 从库函数打印的文本在程序完成执行之后或之前出现,而python“print”打印的文本显示在第一位,尽管它被称为第二位

我无法想象这是我想要的行为。我可能是这里做错了什么的人,所以:

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

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