Eclipse和Python 3:为什么来自ctypes的printf()在后续的print()语句之后显示在控制台输出中

Bri*_*ian 5 python eclipse printf ctypes pydev

我在Windows Vista上运行带有PyDev和Python 3.2的Eclipse,并且正在学习Python和ctypes的教程.

但是,我发现当我调用msvcrt.printf()来打印字符串时,在显示所有其他打印语句之前,这不会显示在Eclipse的控制台输出中.

这是我使用的确切代码:

from ctypes import *

msvcrt = cdll.msvcrt
message_string = "Hello Worlds!\n"

printf = msvcrt.printf
print(printf("Testing: %s".encode('ascii'),message_string.encode('ascii')))


print("foo")

print("why!?")
Run Code Online (Sandbox Code Playgroud)

这是输出:

23
foo
why!?
Testing: Hello Worlds!
Run Code Online (Sandbox Code Playgroud)

我在别处看到(对一般的)唯一的解释提到的printf是如何缓冲和显示之前需要一个换行符,但在字符串中换行,我还增加了一个直接的printf语句('的printf("测试:%s \n",......")并没有什么区别.

我想在Eclipse中工作,我不想每次想要测试脚本时都要继续打开命令提示符,那么有什么办法可以在控制台输出中修复这个顺序吗?为什么会发生这种情况?

Mei*_*ham 0

虽然这不能回答您的问题,但 printf 返回的23是打印字符数,您可以将其替换为sprintfand ,这将返回字符串并将以正确的预期顺序显示在控制台中。

然而,当你可以用 python 做同样的事情时,我不认为有理由使用 mscvcrt 的 printf 。