2010-06-16 5 views
0

J'essaie d'apprendre Python et j'ai rencontré un comportement étrange. J'expérimente des ctypes et une DLL self-made (très simple).Ordre d'exécution Python utilisant le module C

Ce script Python est que je suis en train de courir:

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

print 'I am a line' 

myLib.goodbye() 

J'ai configuré selon Eclipse pour construire la bibliothèque selon this guide, et quand il ne fonctionne pas je l'ai construit en Cygwin gcc.

bonjour() et au revoir() sont mises en œuvre comme

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

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

(où l'exportation est une macro que vous pouvez en savoir plus sur dans le guide ci-dessus)

, il commence néanmoins obtenir bizarre quand la sortie que je reçois du programme est:

I am a line 
Hello 
Goodbye 
Goodbye 

Si vous n'avez pas remarqué, les impressions ne sont pas dans le bon ordre. Le texte imprimé à partir des fonctions de la bibliothèque apparaît après ou juste avant la fin de l'exécution du programme, et le texte imprimé par python 'print' apparaît en premier, bien qu'il soit appelé second.

Je ne peux pas imaginer que ce soit le comportement prévu. Je suis probablement celui qui fait quelque chose de mal ici de toute façon, donc:

  • Que pourrais-je faire de mal?
  • Existe-t-il un moyen d'expliquer ce comportement?

Répondre

2

Il semble que stdout de Python soit tamponné indépendamment de stdout de C. Vous devriez essayer d'appeler flush() pour les forcer à écrire leurs données.

+0

Merci, qui l'a résolu! – Nubsis