Python: OSError: No existe tal archivo o directorio: ”

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  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?

¿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.

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.