Obtener salida cuando se solicita el nombre de usuario en msysgit en Python (en Windows)

Estoy tratando de get el resultado cuando hago una búsqueda de git, pero se está deteniendo al pedir el nombre de usuario y no puedo detectarlo.

Es decir: en una secuencia de commands de Python que estoy haciendo:

cmd = 'git fetch origin master'.split() import subprocess p = subprocess.Popen(cmd, cwd='.',stderr=subprocess.PIPE) while p.poll() is None: r = p.stderr.read(1) print(r) 

Y simplemente se detiene sin imprimir nada. Si lo ejecuté sin piping stderr, aparece el post que solicita el nombre de usuario (así que está escribiendo pero stderr.read no detecta nada).

 [16:41:45 X:\]python test.py Username for 'my.domain.com.br': 

He intentado lidiar con stderr.fileno () directamente, cambiando el bufsize de Popen, escribiendo en el process.stdin, cerrando el stdin y muchas cosas diferentes en vano. ¿Alguien sabe de una manera de hacer que eso funcione? (Mi sensación es que msysgit solo está escribiendo pidiendo el nombre de usuario sin enrojecer o escribiendo una nueva línea y Python no puede manejarlo correctamente, en cuyo caso solo se puede arreglar en msysgit? – aunque aparece en el shell si no lo pipetees, lo cual es extraño).

Context: estoy haciendo un progtwig para ayudar en el event handling múltiples repositorys a la vez (https://github.com/fabioz/mu-repo), entonces, ya que puede ejecutar eso para muchos repositorys a la vez, sin canalizarlo no es realmente una opción, ya que muchas cosas parecen distorsionadas (las cosas sí funcionan si se especifica el acceso ssh o la contraseña ya está configurada por otros medios, pero me gustaría tener una forma de decir a los usuarios que el process está atascado esperando) input en lugar de simplemente colgar allí – si hay una forma de ejecutarlo asegurándose de que git fallará si se solicita la contraseña, eso sería suficiente también).

Configure su configuration global para el nombre de usuario y correo electrónico. Entonces git no pedirá esto.

 git config --global user.name "Your Name" git config --global user.email "your@email.address" 

Tuve un problema similar con el subprocess. Cuando ejecuto el código varias veces en mi entorno (Windows 7, no se necesita contraseña para git), obtengo parte pero no toda la salida, y cada vez que la ejecuto, obtengo una cantidad diferente de salida. Para evitar esto, ejecuté el command y guardé el resultado en un file temporal, luego volví a leer el file y obtuve todos los resultados cada vez, algo como esto:

 #!/bin/python import os import subprocess cmd = "git fetch origin master" filename = "temp.txt" if os.name == "posix": p=subprocess.Popen(['sh', '-c', cmd+' >> '+filename]) elif os.name == "nt": p=subprocess.Popen(['cmd.exe', '/c '+cmd+' >> '+filename]) while not os.path.isfile(filename): pass fd = open(filename, 'r') return_value = None out = "" while return_value == None: text = fd.readline() if text: out += text return_value = p.poll() while text: text = fd.readline() if text: out += text fd.close()