我不知道,但它may与执行此操作的两行相关:
open("tca.txt", 'w').close
这些并没有按照您的预期进行:它们使文件保持打开状态。你需要callclose 方法(不仅仅是检索它):
open("tca.txt", 'w').close()
^^
但可能不是这样。当文件对象变成垃圾时,CPython 将自动关闭它(在本例中会立即发生 - 语句一结束,引用计数就会达到 0)。
也许你应该迁移到 Linux 系统;-)
想法:是否可以运行它python.exe
相反,从 DOS 框(cmd.exe
)你保持开放并忽略?调试有大问题pythonw.exe
致命之处在于没有控制台窗口来显示可能弹出的任何错误消息。
这就引出了另一个问题:这条线在做什么?
print "Running..."
如果你正在运行pythonw.exe
,你永远不会看到它,对吗?然后can引起问题,取决于exactly您正在运行哪些版本的 Python 和 Windows。Standard input
and standard output
并不真正存在,在pythonw
,我记得追踪到一个神秘的pythonw.exe
当“太多”数据被写入时,微软库会崩溃sys.stdout
(which print
uses).
一种判断方法:如果你在python.exe
而不是从 DOS 盒子上运行,并且它运行了一年而没有崩溃,这可能就是原因;-)
Example
这是一个简单的程序:
i = 0
while 1:
i += 1
with open("count.txt", "w") as f:
print >> f, i
print "hi!"
在32位Windows Vista下使用Python 2.7.6,它有根本不同的行为取决于是否python.exe
or pythonw.exe
用于运行它。
Under python.exe
:
C:\Python27>python yyy.py
hi!
hi!
hi!
hi!
hi!
hi!
hi!
hi!
hi!
hi!
hi!
...
这种情况永远持续下去,其价值在于count.txt
不断增加。但:
C:\Python27>pythonw yyy.py
C:\Python27>
也就是说,没有可见的输出。这是预期的:pythonw
运行它的程序断开连接从控制台窗口。
经过很短的时间后,pythonw.exe
无声无息地死去(使用任务管理器可以看到这一点)- 消失得无影无踪。在那时候:
C:\Python27>type count.txt
1025
因此,当从断开连接的程序向标准输出写入“太多”内容时,MS 的库仍然会崩溃。取出print "hi!"
,并且它“永远”运行。
Python 3
这是通过可疑的绑定权宜之计在 Python 3 中“修复”的sys.stdout
to None
在其下pythonw.exe
。你可以阅读这里混乱的历史 http://bugs.python.org/issue706263.