2012-03-27 16 views
8

私はPythonでいくつかの奇妙なファイルの動作をデバッグするのに役立つ必要があります。次のスクリプト(write_con.py)を取る:Windowsのファイル 'con.txt'の名前を付けると、Pythonがファイルではなくコンソールに書き込まれるのはなぜですか?

のLinuxで
f=open('con.txt','w') 
f.write('hi') 

が、これは内容hicon.txtというファイルを作成します。 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> 

しかしconで始まる何か以外のものという名前のファイルには、(write_other_con.py)正常に動作します:

f=open('other_con.txt','w') 
f.write('hi') 

ここで実行します:

C:\Users\rpsharp> C:\Python25\python.exe .\write_other_con.py 
C:\Users\rpsharp> type .\other_con.txt 
hi 

その上で何が起こっています名前付きファイルの接頭辞がconの場合、Windows版のPythonがコンソールに書き込まれますか?

答えて

9

Wikipedia Filename pageをチェックする必要があります。ファイルを保存することができない予約済みキーワードのリストがあります。それはかなりのファイルシステムのために予約された文字を含むテーブルを持っています。

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を含む。

10

Legacy。 DOSでは、 "CON"というファイルに書き込むと、代わりにコンソールに書き込まれます。 Windowsはこの伝統を続けています。

5

これはPythonのエラーではなく、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.

1

Windowsでは、conは予約語であり、ファイル名として使用することはできません。

関連する問題