2010-06-16 5 views
0

Я пытаюсь изучить python и столкнулся с каким-то странным поведением. Я экспериментирую с ctypes и самодельной (очень простой) DLL.Порядок выполнения Python с использованием модуля C

Это Python скрипт я пытаюсь запустить:

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

print 'I am a line' 

myLib.goodbye() 

Я настроил затмение в соответствии построить библиотеку в соответствии с this руководства, а когда это не сработало, я построил его в Cygwin с НКА.

привет() и до свидания() реализуются как

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

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

(где экспорт макрос, который вы можете прочитать больше в приведенном выше руководстве)

Тем не менее, он начинает получать странные, когда выход из программы:

I am a line 
Hello 
Goodbye 
Goodbye 

Если вы не заметили, распечатки находятся не в правильном порядке. Текст, напечатанный из функций библиотеки, появляется после или до того, как программа завершит выполнение, а текст, напечатанный пифатом «печать», появится первым, несмотря на то, что он называется вторым.

Я не могу представить, чтобы это было предполагаемым поведением. Я, вероятно, тот, кто делает что-то неправильно здесь, так:

  • Что я могу делать неправильно?
  • Есть ли способ объяснить это поведение?

ответ

2

Похоже, что stdout на Python буферизуется независимо от центрального выхода C. Вы должны попытаться вызвать flush() на них, чтобы заставить их написать свои данные.

+0

Спасибо, что решил! – Nubsis

Смежные вопросы