2012-03-19 33 views
5

Estoy tratando de ejecutar un comando git simple usando el siguiente script de python.tratando de ejecutar el comando git usando el script python

#!/usr/bin/python 

import commands 
import subprocess 
import os 
import sys 

pr = subprocess.Popen("/usr/bin/git log" , cwd = os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject'), shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
(out, error) = pr.communicate() 


print "Error : " + str(error) 
print "out : " + str(out) 

pero estoy recibiendo el siguiente error aunque estoy ejecutando la secuencia de comandos de Python en el mismo directorio donde reposetory Git es.

Error : fatal: Not a git repository (or any of the parent directories): .git 

que sospechaba que el GIT podría quedó correputed, pero los archivos git están muy bien y los comandos git funcionan si ejecuto el símbolo del sistema normal.

Intenté buscar en la red pero no pude obtener información útil. Por favor, ayuda será muy apreciado.

+0

¿Qué pasa con el código que se ajusta a 79 caracteres? –

Respuesta

4

Prueba esto:

#!/usr/bin/python 

import commands 
import subprocess 
import os 
import sys 

pr = subprocess.Popen("/usr/bin/git log" , cwd = os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject/'), shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
(out, error) = pr.communicate() 


print "Error : " + str(error) 
print "out : " + str(out) 

La ruta del directorio debe tener '/' al final.

+0

Gracias por su pronta respuesta Adam, funciona ahora. – Rakesh

+0

Tenga en cuenta que este error también puede ocurrir si tiene configurada la variable de entorno 'GIT_DIR' (particularmente en una ruta relativa, como puede ocurrir en los ganchos de git) –

5

El problema es el uso de os.path.dirname():

os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject') 

le dará:

>>> os.path.dirname('/ext/home/rakesh.kumar/workspace/myproject') 
'/ext/home/rakesh.kumar/workspace' 

cuales, apuesto, no es lo que desea.

Cuestiones relacionadas