Estoy teniendo el siguiente error:
WindowsError: [Error 2] The system cannot find the file specified
Mi codigo es:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 bits. Python 3.x más reciente, estable.
¿Algunas ideas?
Gracias,
python
path
python-3.x
Sri
fuente
fuente

Respuestas:
Cuando el comando es un shell incorporado, agregue un 'shell = True' a la llamada.
Por ejemplo, para
dirti escribirías:Para citar de la documentación:
fuente
dir.exemientras hay un/bin/lsin * nix. CMD.EXE lodirimplementa de forma muy similar a como lo implementa bash .cdPATHdeos.environy buscarlo manualmente.En Windows, creo que el
subprocessmódulo no se ve en el aPATHmenos que paseshell=Trueporque se usaCreateProcess()detrás de escena. Sin embargo,shell=Truepuede ser un riesgo para la seguridad si pasa argumentos que pueden provenir de fuera de su programa. Nosubprocessobstante, para poder encontrar el ejecutable correcto, puede utilizarshutil.which. Suponga que el ejecutable en suPATHse llamafrob:(Esto funciona en Python 3.3 y superior).
fuente
En Windows, debe llamar a través de cmd.exe. Como mencionó Apalala, los comandos de Windows se implementan en cmd.exe no como ejecutables separados.
p.ej
/ c le dice a cmd que ejecute el comando de seguimiento
Esto es más seguro que usar shell = True, que permite inyecciones de shell.
fuente
/klugar de/c. Ingresecmd /?en la línea de comando para obtener más detalles.Si está usando powershell, entonces estará
subprocess.call(['powershell','-command','dir']). Powershell admite una gran parte de los comandos POSIXfuente
Después de mucho rascarme la cabeza, descubrí que ejecutar un archivo que se encuentra en C: \ Windows \ System32 \ mientras se ejecuta una versión de Python de 32 bits en una máquina de 64 bits es un problema potencial, debido a que Windows intenta superar en inteligencia al proceso, y redirigir las llamadas a C: \ Windows \ System32 a C: \ Windows \ SysWOW64.
Encontré un ejemplo de cómo solucionar esto aquí: http://code.activestate.com/recipes/578035-disable-file-system-redirector/
fuente
Para citar de la documentación:
"Antes de Python 3.5, estas tres funciones comprendían la API de alto nivel para subprocesar. Ahora puede usar run () en muchos casos, pero muchos de los códigos existentes llaman a estas funciones".
SO: en lugar de subprocess.call use subprocess.run para Python 3.5 y superior
fuente
Encontré el mismo problema mientras llamaba a PHP. La razón es que PHP no está en PATH, por lo que no se encontró el comando PHP. Pero PowerShell descubrió que existe en la ubicación actual y sugiere reemplazar el 'PHP' por el '. \ PHP' si confío en este comando. Entonces funciona bien.
fuente