2012-03-27 3 views
8

Necesito ayuda para depurar algún comportamiento de archivo extraño en Python. Tome la siguiente secuencia de comandos (write_con.py):¿Por qué nombrar un archivo 'con.txt' en Windows hace que Python escriba en la consola, no en el archivo?

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

En Linux, esto crea un archivo llamado con.txt con el contenido hi. En Windows, esto escribe hi en la consola y no crea un archivo. He intentado esto con Python 2.5.1, 2.6.3, 2.6.5 y 2.7.2. Ejemplo de ejecución:

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

Sin embargo, un archivo con el nombre que no sea algo que cualquier cosa que se inicia con con funciona bien (write_other_con.py):

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

Aquí está un funcionamiento:

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

lo que está pasando que hace que las versiones de Windows de python escriban en la consola cuando el prefijo del archivo nombrado es con?

Respuesta

9

Debe verificar Wikipedia Filename page. Tiene una tabla que contiene los caracteres reservados para bastantes sistemas de archivos.

En Windows y utilidades de DOS, algunas palabras también se pueden reservar y no se pueden usar como nombres de archivo. Por ejemplo, un archivo de dispositivo DOS:

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

10

Legacy. En DOS, escribir en un archivo llamado "CON" lo escribe en la consola; Windows continúa con esta tradición.

5

Esto no es un error de Python, sino una convención de nomenclatura de Windows. Hay una lista de palabras clave reservadas que Windows no le permitirá guardar archivos o carpetas, como 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

En Windows con es una palabra reservada y no se puede utilizar como nombre de archivo.

Cuestiones relacionadas