2010-06-16 58 views
0

我試圖學習python並遇到一些奇怪的行爲。我正在嘗試ctypes和一個自制的(非常簡單的)DLL。使用C模塊的Python執行順序

這是Python腳本我試圖運行:

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

print 'I am a line' 

myLib.goodbye() 

我根據根據this指導,構建庫配置日食,當它沒有工作,我建立了它在Cygwin的與GCC。

你好(),再見()作爲

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

EXPORT void goodbye(void) { 
    puts ("Goodbye"); 
} 

(其中,出口的是,你可以在上述指南中閱讀更多關於宏)

然而實現,它開始變得怪異當我得到的程序是:

I am a line 
Hello 
Goodbye 
Goodbye 

如果您沒有注意到,打印輸出的順序不正確。 從程序庫函數打印的文本出現在程序執行完成之後或之前,並且由python'print'打印的文本出現在第一個,儘管被稱爲第二個。

我無法想象這是預期的行爲。我可能是一個在這裏做錯了,所以:

  • 我能做什麼錯?
  • 有什麼方法可以解釋這種行爲嗎?

回答

2

它看起來像Python的標準輸出緩衝獨立於C的標準輸出。你應該嘗試調用它們的flush()來強制它們寫入他們的數據。

+0

謝謝,解決了! – Nubsis 2010-06-16 14:34:26