J'ai essayé d'utiliser le C-fonction printf()
dans le python en ligne de commande sur Linux. Pour faire ce travail, j'ai importé ctypes
. Mon problème est: Si je crée un objet de CDLL
utilisation de l' printf()
-fonction dans une boucle, je reçois vraiment une drôle de sortie:
>>> import ctypes
>>> libc = ctypes.CDLL("libc.so.6")
>>> for i in range(10):
... libc.printf("%d", i)
...
01
11
21
31
41
51
61
71
81
91
>>>
Cependant, lorsque j'appelle cette boucle à l'intérieur d'une fonction, il fonctionne comme prévu:
>>> import ctypes
>>> libc = ctypes.CDLL("libc.so.6")
>>> def pr():
... for i in range(10):
... libc.printf("%d", i)
... libc.printf("\n")
...
>>> pr()
0123456789
>>>
Je ne peux pas deviner quelles sont les causes de ce comportement ...
Je suis à l'aide de Python 2.7.6 sur Linux si il le faut.
EDIT:
Une version de Python / système d'exploitation n'a aucune influence à ce. Voir PM 2Ring la réponse ci-dessous pour plus de détails. Sur Windows, vous n'avez qu'à changer l'initialisation de libc
de libc = ctypes.CDLL("msvcrt.dll")
où .dll
est facultatif. Une autre façon d'obtenir de bons résultats de l'appel d'une fonction serait de stocker la valeur de retour de l' printf()
dans une variable:
>>> import ctypes
>>> libc = ctypes.CDLL("libc.so.6") # "mscvrt.dll" on windows
>>> for i in range(10):
... r = libc.printf("%d", i)
...
0123456789>>>
Je préfère encore la fonction, car vous pouvez ajouter un dernier saut de ligne plus facile.