2012-09-11 13 views
8

Recibo un error de "caracteres ilegales en la ruta" al hacer comandos chdir en Iron Python. Esto está sucediendo en tiempo de ejecución con mi código, pero incluso en la consola de Iron Python tiene este problema. Estoy usando el módulo nt porque en el código el módulo os no funciona (parece ser un problema conocido).¿Por qué Python (IronPython) informa "Caracteres no válidos en la ruta" cuando se utiliza la palabra bin?

Haciendo un poco de juego, resulta que los "caracteres ilegales" son en realidad la palabra bin. A continuación se muestra el texto de la consola que me muestra cómo obtener el error solo cuando navego al directorio bin.

Aquí está el ejemplo

>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx') 
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory') 
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory\bin') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Illegal characters in path. 

Cuál es peor es que voy a desplazarse a un directorio totalmente diferente (que ni siquiera tiene un directorio bin) y tratar de navegar a un "contenedor" subdirectorio y yo Todavía obtendré ese error!

¿Alguna idea?

Respuesta

14

El separador de ruta \ es también un carácter de escape de python. Duplicar ellos, o mejor aún, utilizar r'' literales pitón primas en su lugar:

r'c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx' 
'c:\\Users\\xxxxx\\Documents\\Visual Studio 2010\\Projects\\xxx' 

Por ejemplo, \n es un carácter de nueva línea, y \t se interpreta como una ficha. En su caso específico, \b se interpreta como un retroceso.

+0

DOH. Sabía que ... Supongo que da la casualidad de que estaba bien escapando de todos esos personajes en particular excepto b ..... ¡gracias! – Mike

5

\ es un carácter de escape en cadenas Python. \b es el retroceso, por lo que barfs en \bin: no está especificando el directorio Directory\bin, está especificando el directorio Directory<backspace>in, que no es una ruta legal e incluso si lo fuera, no existe.

Puede escribir la secuencia doblando las barras diagonales inversas o utilizando el indicador r según lo sugerido por Martijn. Una tercera alternativa es simplemente usar barras diagonales como en cualquier otro sistema operativo civilizado. Windows está perfectamente feliz de usar estos.

+0

+1 para "civilizado". – lvc

+0

+1 por enseñarme esas ventanas (que felizmente puedo evitar la mayor parte del tiempo) hoy en día acepta '/' separadores de ruta como un sistema operativo normal. –

+0

Nunca utilizo la ruta de Windows. En realidad, no estoy generando las rutas, pero usando la clase .Net Path para crear "rutas específicas de la plataforma". Así que, obviamente, actuará de forma diferente en Windows que en Linux (mi preferencia). Obviamente, usted tiene problemas como este en los que ahora tengo que pasar, como usted señala claramente, Windows no es solo un nudillo, sino un horrible OS en general. – Mike

1

Windows y la mayoría de los demás sistemas operativos reconocerán las barras diagonales. Por lo tanto, en lugar de la barra invertida, doble barra invertida o r '' (más en los literales de cadena here), puede usar barras diagonales y listo. La respuesta here también está bien detallada.

ACTUALIZACIÓN: PS: Use barras diagonales inversas y literales de cadena con precaución. Siempre verifique su caso específico. Hay un buen comentario al respecto en este answer

+0

Esto no es cierto en Windows en todas las circunstancias. Existen numerosas aplicaciones, funciones dentro de windows que requieren \ para rutas. Simplemente abra un símbolo del sistema, escriba "copy ./directory/file.txt ./locationdir" y verá lo que quiero decir. – Mike

+0

@Mike: definitivamente tienes razón. Definitivamente estoy de acuerdo en que esto no funciona el 100% del tiempo, incluso en Windows. Loco como nada es completamente universal cuando se trata de os. cosas. También leí de la respuesta a la que me he vinculado en mi respuesta que: "Así que las cadenas sin formato no son 100% crudas, todavía hay un procesamiento rudimentario de la barra invertida". – Alain

+0

La respuesta anterior con "cualquier otro sistema operativo civilizado". Creo que aplica Windows tiene un diseño sin sentido que no es bueno para los usuarios, empresarios o desarrolladores. Intento hacer todo el desarrollo en Linux que pueda para evitar este tipo de cosas. Necesito mantener un recuento de las ubicaciones donde/no es aceptado en Windows, porque otro chico y yo nos encontramos con este y otra vez. – Mike

Cuestiones relacionadas