小编Bri*_*ian的帖子

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

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

python eclipse printf ctypes pydev

5
推荐指数
1
解决办法
987
查看次数

是否有 Java CopyOnWriteArrayList 实现的改进替代方案以及如何请求更改 Java 规范?

CopyOnWriteArrayList 几乎具有我想要的行为,如果删除不必要的副本,它将正是我正在寻找的。特别是,它可以像 ArrayList 一样在 ArrayList 末尾进行添加 - 即,没有理由每次都创建一个新副本,这是非常浪费的。它实际上可以限制 ArrayList 的末尾来为读者捕获快照,并在添加新项目后更新末尾。

这种增强似乎是值得拥有的,因为对于许多应用程序来说,最常见的添加类型是添加到 ArrayList 的末尾 - 这甚至是选择使用 ArrayList 的一个原因。

也不会有额外的开销,因为它只能在附加时不复制,尽管它仍然需要检查是否需要重新调整大小,但 ArrayList 无论如何都必须这样做。

  1. 是否有任何替代实现或数据结构具有这种行为,而无需在末尾添加不必要的副本(即,线程安全且经过优化以允许频繁读取,而写入仅在列表末尾添加)?

  2. 如何提交更改请求以请求对 Java 规范进行更改,以消除在 CopyOnWriteArrayList 末尾添加的副本(除非需要重新调整大小)?

我真的很希望看到核心 Java 库对此进行更改,而不是维护和使用我自己的自定义代码。

java copyonwritearraylist

-1
推荐指数
1
解决办法
2936
查看次数

标签 统计

copyonwritearraylist ×1

ctypes ×1

eclipse ×1

java ×1

printf ×1

pydev ×1

python ×1