代码之家  ›  专栏  ›  技术社区  ›  mahju

使用C模块的Python执行顺序

  •  0
  • mahju  · 技术社区  · 14 年前

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

    from ctypes import *
    myLib = CDLL("libDlltest")
    myLib.hello()
    myLib.goodbye()
    
    print 'I am a line'
    
    myLib.goodbye()
    

    我已经根据配置了eclipse this

    hello()和goodbye()实现为

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

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

    I am a line
    Hello
    Goodbye
    Goodbye
    

    从库函数打印的文本出现在程序执行完成之后或之前,而python“print”打印的文本出现在第一位,尽管它被称为第二位。

    我无法想象这是我想要的行为。不管怎么说,我可能是在做错事的人,所以:

    • 我会做错什么?
    1 回复  |  直到 14 年前
        1
  •  2
  •   Ned Batchelder    14 年前

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