Captura de la salida de logging de git en Windows XP con Python

Este fragment de código funciona en la mayoría de Unix al que tengo acceso (Linux, Solaris, AIX) y también en Windows 7 / Server 2008 R2 y versiones posteriores que utilicé para get el resultado del logging de git:

from subprocess import Popen, PIPE import platform cmd = ["git", "--no-pager"] if platform.system() == "Windows": cmd.append("--work-tree=/path/to/working/copy") cmd.extend(["log", "--pretty=format:\"%cd %h\"", "--date=short", "--", "/path/to/working/copy/filename/to/check"]) proc = Popen(cmd, stdout=PIPE, stderr=PIPE) proc.wait() f = proc.stdout some_stuff = f.read() f.close() 

Sin embargo, en Windows XP usando msysgit no estoy obteniendo ningún valor para la variable some_stuff, lo cual es extraño ya que ejecutar el command generado funciona en la línea de command en Windows.

¿Algún consejo sobre qué debería hacer aquí?

Después de investigar un poco, esto es lo que encontré:

  1. En Windows, msysgit recomienda el uso de la secuencia de commands envoltorio git.cmd lugar de especificar directamente git.exe .
  2. msysgit es especialmente sensible a los nombres de file de ruta normalizados, en particular, la letra de la unidad debe estar en mayúsculas y el caso de los nombres de files debe coincidir con la salida de GetLongPathName .
  3. Usar barras diagonales y barras diagonales inversas, ya que los separadores de ruta aún funcionan.

Al probar lo mencionado anteriormente, parece que:

  • No hay necesidad de especificar la opción --work-tree
  • La "normalización" de nombres de ruta pasándola a os.path.normpath() no funcionará, ya que asumirá insensibilidad a mayúsculas y minúsculas y alterará la letra de la unidad.
  • El uso de la ruta de acceso corta (la salida de GetShortPathName ) no funcionará.