modules - Python: OSError:[Errno 2] No existe tal archivo o directorio: ''''
python module operator (3)
¿Has notado que no recibes el error si corres?
python ./script.py
en lugar de
python script.py
Esto se debe a que sys.argv[0]
leerá ./script.py
en el primer caso, lo que le da a os.path.dirname
algo con lo que trabajar. Cuando no especifica una ruta, sys.argv[0]
lee simplemente script.py
, y os.path.dirname
no puede determinar una ruta.
Tengo un raspador de python de 100 líneas y 3 años que ahora falla. Las líneas de salida son:
import urllib, re, os, sys, time # line 1: import modules
os.chdir(os.path.dirname(sys.argv[0])) # line 2: all works in script''s folder > relative address
# (rest of my script here!)
Cuando se ejecuta,
$cd /my/folder/
$python script.py
Recibo el error:
python script.py
Traceback (most recent call last):
File "script.py", line 2, in <module>
os.chdir(os.path.dirname(sys.argv[0]))
OSError: [Errno 2] No such file or directory: ''''
¿Cómo debo leer este error y qué hacer?
Tuve este error porque estaba proporcionando una cadena de argumentos a subprocess.call
lugar de una matriz de argumentos. Para evitar esto, use shlex.split
:
import shlex, subprocess
command_line = "ls -a"
args = shlex.split(command_line)
p = subprocess.Popen(args)
Utilice os.path.abspath()
:
os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
sys.argv[0]
en su caso es solo un nombre de script, no directorio, por lo que os.path.dirname()
devuelve una cadena vacía.
os.path.abspath()
convierte eso en una ruta absoluta correcta con el nombre del directorio.