python check_output solución en 2.6

Me estoy ejecutando en una máquina con Python 2.6 y no, no puedo actualizar por ahora.
Necesito la function subrpocess.check_output , pero como he entendido, esta es una nota definida en 2.6. Así que he usado una solución alternativa :

 try: import subprocess if "check_output" not in dir( subprocess ): # duck punch it in! def check_output(*popenargs, **kwargs): r"""Run command with arguments and return its output as a byte string. Backported from Python 2.7 as it's implemented as pure python on stdlib. >>> check_output(['/usr/bin/python', '--version']) Python 2.6.2 """ process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) output, unused_err = process.communicate() retcode = process.poll() if retcode: cmd = kwargs.get("args") if cmd is None: cmd = popenargs[0] error = subprocess.CalledProcessError(retcode, cmd) error.output = output raise error return output subprocess.check_output = check_output # Git Information git_info= { "last_tag" : subprocess.check_output(['git', 'describe', '--always']), "last_commit" : subprocess.check_output(['git', 'log', '-1', '--pretty=format:\'%h (%ci)\'', '--abbrev-commit']) } except Exception, e: raise e else: data = git_info return data 

Estoy usando esto junto con Django + wsgi .

La pieza anterior de código siempre me da el Command '['git', 'describe', '--always']' returned non-zero exit status 128 .

Ahora si ejecuto git describe --always obtengo una salida correcta, así que no creo que el problema esté ahí.

No tengo idea de qué podría causar el problema.

EDITAR:
Si uso el command subprocess.check_output(['ls', '-l']) o subprocess.check_output(['pwd']) cosas funcionan y desde aquí entiendo que la vista llamada desde Django se está ejecutando en /var/www siendo este el DocumentRoot especificado en el file de configuration de Apache.

El file real no se encuentra en /var/www de hecho, todo funciona en mi máquina local, donde utilizo el server de desarrollo django local. Entonces, el command git no funcionará porque no hay un repository de git en /var/www . ¿Cómo puedo ejecutar el subprocess.check_output(['git', 'describe', '--always']) original.check_output subprocess.check_output(['git', 'describe', '--always']) desde su ruta original (donde se encuentra realmente el file python)?

Lo he solucionado pasando el argumento cwd a check_output como se sugiere en un comentario.

 def get_git_info(): git_info = {} try: import subprocess # subprocess.check_output did not exist in 2.6 if "check_output" not in dir(subprocess): # duck punch it in! # workaround/networkingefinition for the subprocess.check_output() command def check_output(*popenargs, **kwargs): """ Run command with arguments and return its output as a byte string. Backported from Python 2.7 as it's implemented as pure python on stdlib. >>> check_output(['/usr/bin/python', '--version']) Python 2.6.2 """ process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) output, unused_err = process.communicate() retcode = process.poll() if retcode: cmd = kwargs.get("args") if cmd is None: cmd = popenargs[0] error = subprocess.CalledProcessError(retcode, cmd) error.output = output raise error # In case we want the error in string format: # stderr=subprocess.STDOUT # raise Exception(stderr) return output subprocess.check_output = check_output # Set on which dir the git command should be invoked if os.path.isdir(r'/my/git/dir'): cwd = r'/my/git/dir' # If using the django local dev server, then it will invoke the command from the dir where this script is located else: cwd = None # Check that the directory is a git repo: # 'git rev-parse' returns a number !=0 if we are in a git repo if subprocess.check_output(['git', 'rev-parse'], cwd=cwd) != 0: # Git Information git_info = { "last_tag": subprocess.check_output(['git', 'describe', '--always'], cwd=cwd), "last_commit": subprocess.check_output(['git', 'log', '-1', '--pretty=format:\'%h (%ci)\'', '--abbrev-commit'], cwd=cwd), } except Exception, e: log.exception('Problem getting git information') pass # return the git info or an empty dict (defined above) return git_info