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.