2012-03-27 14 views
8

Potrzebuję pomocy przy debugowaniu niektórych dziwnych zachowań plików w Pythonie. Weźmy następujący skrypt (write_con.py):Dlaczego nazywanie pliku "con.txt" w Windows powoduje, że Python zapisuje do konsoli, a nie do pliku?

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

W Linuksie, to tworzy plik o nazwie con.txt z treścią hi. W systemie Windows zapisuje on hi do konsoli i nie tworzy pliku. Próbowałem tego w Pythonie 2.5.1, 2.6.3, 2.6.5 i 2.7.2. Przykład run:

C:\Users\rpsharp> C:\Python27\python.exe .\write_con.py 
hiC:\Users\rpsharp> C:\Python25\python.exe .\write_con.py 
hiC:\Users\rpsharp> 

jednak plik o nazwie coś innego niż coś, co zaczyna się od con działa dobrze (write_other_con.py):

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

Oto run:

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

Co się dzieje, że powoduje, że windowsowe wersje Pythona zapiszą się do konsoli, gdy prefiks podanego pliku to con?

Odpowiedz

9

Musisz sprawdzić Wikipedia Filename page. Ma tabelę zawierającą znaki zastrzeżone dla wielu systemów plików.

W programach Windows i DOS niektóre słowa mogą być również zarezerwowane i nie mogą być używane jako nazwy plików. Na przykład, DOS Plik urządzenia:

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

10

Legacy. W DOS zapisywanie do pliku o nazwie "CON" zapisuje go w konsoli; Windows kontynuuje tę tradycję.

5

Nie jest to błąd Pythona, ale konwencja nazewnictwa systemu Windows. Istnieje lista zarezerwowanych słów kluczowych, których system Windows nie zezwala na zapisywanie plików lub folderów, w tym 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

W systemie Windows con jest słowem zastrzeżonym i nie może być używane jako nazwa pliku.

Powiązane problemy