Pregunta
Estoy trabajando en un bit de código que se supone que ejecuta un archivo exe dentro de una carpeta en mi sistema y aparece un error que dice ...
WindowsError: [Error 3] El sistema no puede encontrar la ruta especificada. Aquí hay un poco del código:
exepath = os.path.join(EXE file localtion)
exepath = '"' + os.path.normpath(exepath) + '"'
cmd = [exepath, '-el', str(el), '-n', str(z)]
print 'The python program is running this command:'
print cmd
process = Popen(cmd, stderr=STDOUT, stdout=PIPE)
outputstring = process.communicate()[0]
He importado subprocesos y también de importación de subprocesos *
Por ejemplo, así es como se ve la ubicación de mi archivo exe en la primera línea del código que muestro:
exepath= os.path.join('/Program Files','next folder','next folder','blah.exe')
¿Me estoy perdiendo algo?
Solución
Necesita escapar correctamente del espacio en la ruta ejecutable
Otros consejos
Además de escapar correctamente de espacios y otros caracteres que podrían causar problemas (como /), también puede usar las rutas antiguas de DOS de 8 caracteres.
Por ejemplo, los archivos de programa serían:
Programe ~ 1, asegurándose de agregar ~ 1 para los últimos dos caracteres.
EDITAR: puede agregar una r al frente de la cadena, convirtiéndola en un literal sin formato. Python leería el carácter de cadena por carácter. Así:
r " \ Archivos de programa "
Si no recuerdo mal, no necesita citar su ruta de archivo ejecutable, como lo hace en la segunda línea.
EDITAR: Bueno, simplemente agarré el cuadro de Windows cercano y probé esto. Popen funciona igual independientemente de que la ruta se cite o no. Entonces esto no es un problema.
AFAIK, no hay necesidad de rodear la ruta entre comillas a menos que cmd.exe
participe en la ejecución del programa.
Además, es posible que desee utilizar la variable de entorno ProgramFiles
para averiguar la ubicación real de 'Archivos de programa' porque eso depende de la configuración regional y también se puede ajustar con TweakUI.