versiones guia español descargar actualizar python windows subprocess ls dir

python - guia - Error durante el subproceso llamando a ls



qgis manual (2)

¿Alguna idea de lo que está tratando de decir el error?

Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> subprocess.call(["ls", "-l"]) File "D:/Python27/lib/subprocess.py", line 522, in call return Popen(*popenargs, **kwargs).wait() File "D:/Python27/lib/subprocess.py", line 710, in __init__ errread, errwrite) File "D:/Python27/lib/subprocess.py", line 958, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified


Está intentando ejecutar el ls -l en Windows. Solo funcionará en sistemas basados ​​en Unix.

subprocess.call(["ls", "-l"])

Si estás en Windows, prueba

subprocess.call(["dir"])

en lugar.

Alternativamente, podrías probar algo como Cygwin .


Está llamando al comando ls en Windows, que no tiene un ls . Puede tomar un puerto de ls para Windows desde http://gnuwin32.sourceforge.net/packages/coreutils.htm y agregar su directorio bin instalado a su PATH Windows (o agregarlo a PATH en tiempo de ejecución de su script de python. usted no sabe cómo hacer esto, vea esta y esta pregunta respectivamente).

dir es el equivalente de Windows, pero imprimirá una salida con formato diferente en comparación con ls , y presumiblemente, esta llamada es para obtener algún tipo de información de un directorio. Hay mejores formas de hacerlo en Python. Si puede identificar qué información está tratando de obtener (por ejemplo, bits de permiso), entonces puede escribir una versión de python pura de esto (o encontrar un fragmento de python equivalente para Windows que hace esto) y no depender de comandos externos.

Curiosamente, subprocess.call() simplemente ejecuta el comando y devuelve el código de error. ls solo que imprime información, así que si esa es la intención (solo para mostrarle al usuario el contenido de un directorio en una consola), entonces puede reemplazarlo con una llamada a dir . A veces, deberá proporcionar shell=True como parámetro dependiendo del comando al que está llamando. Sin embargo, preste atención a la advertencia en la documentación. Si está intentando extraer información, probablemente quiera hacer una llamada de estilo subprocess.Popen() o subprocress.check_output() , donde puede realmente consumir la salida del programa llamado.

Si, por ejemplo, es solo para obtener la lista de archivos / directorios en un directorio y / o sus marcas de tiempo, entonces esta es una forma muy redonda de obtener esta información, y todos pueden hacerse en python, por ejemplo, os.walk() , os.fstat() , y en Python3, pathlib son algunas formas de obtener información de archivos en un directorio.