Cuando tengo que escribir una secuencia de comandos de python para ejecutar Devenv con configurar "Debug|Win32" no hace nada

StackOverflow https://stackoverflow.com/questions/1049784

  •  20-08-2019
  •  | 
  •  

Pregunta

Actualización: Cuando yo uso el subprocess.call en lugar de subprocess.Popen, el problema se ha resuelto, ¿alguien sabe cuál es la causa?Y vino otro problema:Me parece que no puede encontrar una manera de controlar la salida...Es allí una manera de redirigir la salida de subprocess.call a una cadena o algo por el estilo?Gracias!

Estoy tratando de utilizar Devenv para construir proyectos, y funciona muy bien cuando yo escriba en el símbolo del sistema como devenv A.sln /build "Debug|Win32" - pero cuando yo uso una de python para ejecutar utilizando Popen(cmd,shell=true) donde cmd es la misma línea que el anterior, no muestra nada.Si puedo quitar el |, cambiar a "Debug" sólo, funciona....

¿Alguien sabe por qué sucede esto?He intentado poner un \ antes de |, pero todavía no pasó nada..

Este es el código que estoy usando:

from subprocess import Popen, PIPE

cmd = ' "C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE\\devenv" solution.sln /build "Debug|Win32" '

sys.stdout.flush()
p = Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE)
lines = []
for line in p.stdout.readlines():
    lines.append(line)
out = string.join(lines)
print out
if out.strip():
    print out.strip('\n')
    sys.stdout.flush()

...que no funciona, sin embargo, si puedo intercambiar Debug|Win32 con Debug, funciona perfectamente..

Gracias por todos los comentarios aquí

¿Fue útil?

Solución

Cuando se utiliza shell = False, que tratará la cadena como un solo comando, por lo que necesita para pasar el comando / arugments como una lista .. Algo así como:

from subprocess import Popen, PIPE

cmd = [
    r"C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv", # in raw r"blah" string, you don't need to escape backslashes
    "solution.sln",
    "/build",
    "Debug|Win32"
]

p = Popen(cmd, stdout=PIPE, stderr=PIPE)
out = p.stdout.read() # reads full output into string, including line breaks

print out

Otros consejos

Hay una diferencia entre devenv.exe y devenv.com, ambos de los cuales son ejecutables y vivir en el mismo directorio (suspiro).Las líneas de comandos utilizado en la pregunta y que algunas respuestas no dicen lo que ellos quieren, así que no estoy seguro de que será acostumbrarse.

Si desea llamar desde la línea de comandos, a continuación, usted necesita para asegurarse de que el uso de devenv.com, que , de lo contrario es probable que obtener una interfaz gráfica de usuario apareciendo.Creo que esto podría ser la causa de algunos (pero no todos) de la confusión.

Vea la sección 17.1.5.1. en la documentación de Python.

En Windows, Python añade automáticamente las comillas alrededor del argumento de la configuración del proyecto de depuración es decir | win32 se pasa como "depuración | win32" a Devenv. NO es necesario añadir las comillas dobles y NO necesita pasar shell = True a Popen.

Uso ProcMon para ver la cadena de argumento pasado a Devenv.

tratar doble citando como: 'devenv / build "depuración | Win32" A.sln'

Parece que shell de Windows' que está tomando | como una tubería (a pesar de las cotizaciones y escapes). ¿Ha intentado shell=False lugar?

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