Pregunta

Estoy utilizando:

Tengo una variable de entorno que parece una ruta absoluta (/path/to/dir), pero lo estoy usando para construir una URL git. En algún momento, se está haciendo traducido a C:/Program Files/Git/path/to/dir. Parece como Python tiene la culpa:

En una cáscara de git bash:

$ export VAR=/path/to/dir
$ echo $VAR
/path/to/dir
$ python
>>> import os
>>> os.environ['VAR']
'C:/Program Files/Git/path/to/dir'

fiesta de Git no se está traduciendo el camino, pero Python es?

En un símbolo del sistema de Windows, Python lo hace bien:

C:\>set VAR=/path/to/dir
C:\>echo %VAR%
/path/to/dir

C:\>python
>>> import os
>>> os.environ['VAR']
'/path/to/dir'

Puede alguien explicar lo que está pasando aquí? Y cómo puedo evitar que la traducción de una cáscara del golpe?

EDIT:. Debo añadir que mi script en Python se ejecuta en OS X y Windows, así que si alguien tiene una solución sería bueno si se trabaja en ambas plataformas

¿Fue útil?

Solución

Mi conjetura sería que esta no es la culpa de pitón, pero la cáscara git bash.
Tal vez la cáscara Git Bash está mintiendo cuando nos fijamos en la variable.
O bien, tratar de no poner la primera / y añadir de nuevo más tarde (si no se produce la traducción).

Si trato con cygwin, funciona:

$ export test="/bin"
$ python
>>> import os
>>> os.environ["test"]
'/bin'

Otros consejos

El problema definitivamente suena como que está causada por MSYS. Cuando un proceso MSYS ejecutivos de TI un proceso no MSYS (por ejemplo, su cáscara msysgit fiesta llamar de Windows nativa de Python), los argumentos se comprueban para cualquier cosa que se parece a una ruta POSIX absoluta (por ejemplo, las cosas que comienzan con un solo '/') y estos son traducida al camino 'real' de Windows subyacente para que el programa no MSYS puede encontrarlos. Es probable que este mismo proceso sucede al contenido de las variables de entorno también, por la misma razón.

Esta sería la razón por la eliminación de la principal '/' que funciona (el valor no se ve como un camino POSIX más), ¿por qué añadir un extra funciona (ídem), y por qué esto funciona bien bajo Cygwin (no es MSYS ). También estoy adivinando que ha instalado msysgit en 'C: \ Archivos de programa \ Git', y que esta es la razón por MSYS piensa su jerarquía 'falso' archivo POSIX tiene sus raíces allí y lo añade a la parte delantera de '/ ruta / a / dir' para usted.

Por desgracia, si esa es la explicación a continuación, no hay una solución clara. Golpeé un problema similar tratando de pasar caminos remotos a través de ssh y no he encontrado ninguna buena ronda maneras esto mismo, y de acuerdo con la discusión en http://comments.gmane.org/gmane.comp.gnu.mingw.msys/4511 (de 2008) simplemente no es una solución obvia más allá de las soluciones que ha encontrado hasta el momento. Si esto se convierte en un problema más grande para usted, es posible que desee subir en las listas de correo o gestor de fallos MinGW-MSYS. De acuerdo con la discusión Gmane, que nunca había sido informado formalmente a pesar de ser un problema conocido.

La consola que se obtiene de msysgit es probablemente modificado para las necesidades del usuario git, desde mi Punto de vista, sólo es útil para tareas sencillas y acceder a la línea de comandos git no desarrollar y Ejecutar secuencias de comandos Python (que está utilizando una instalación de Python para Windows en una cáscara instalada para una aplicación específica, que no suena bien).

Debe instalar Cygwin y su paquete python (e incluso el paquete git si quieres) para obtener una entorno POSIX correcta con los binarios y bibliotecas preparadas para ello.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top