为什么在Windows中命名文件'con.txt'会使Python写入控制台而不是文件?

Ric*_*ich 8 python

我需要帮助调试Python中的一些奇怪的文件行为.采取以下脚本(write_con.py):

f=open('con.txt','w')
f.write('hi')
Run Code Online (Sandbox Code Playgroud)

在Linux中,这将创建一个con.txt使用内容调用的文件hi.在Windows中,这会写入hi控制台并且不会创建文件.我用Python 2.5.1,2.6.3,2.6.5和2.7.2尝试过这个.示例运行:

C:\Users\rpsharp> C:\Python27\python.exe .\write_con.py
hiC:\Users\rpsharp> C:\Python25\python.exe .\write_con.py
hiC:\Users\rpsharp>
Run Code Online (Sandbox Code Playgroud)

然而,一个名称以开头的东西命名的文件con工作正常(write_other_con.py):

f=open('other_con.txt','w')
f.write('hi')
Run Code Online (Sandbox Code Playgroud)

这是一个运行:

C:\Users\rpsharp> C:\Python25\python.exe .\write_other_con.py
C:\Users\rpsharp> type .\other_con.txt
hi
Run Code Online (Sandbox Code Playgroud)

当命名文件的前缀是con?时,会发生什么导致Windows版本的python写入控制台?

Ign*_*ams 10

遗产.在DOS中,写入名为"CON"的文件将其写入控制台; Windows延续了这一传统.


Tha*_*sas 9

您必须检查Wikipedia Filename页面.它有一个表,包含很多文件系统的保留字符.

在Windows和DOS实用程序中,某些单词也可能被保留,不能用作文件名.例如,DOS设备文件:

CON,PRN,AUX,CLOCK $,NUL COM0,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT0,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9.


Pen*_*der 5

这不是Python错误,而是Windows命名约定.有一个保留关键字列表,Windows不允许您保存文件或文件夹,包括CON, PRN, AUX, CLOCK$, NUL COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9.