J'ai 100 lignes, 3 ans python grattoir qui bug maintenant. Les lignes de départ sont:
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!)
Lors de l'exécution,
$cd /my/folder/
$python script.py
Je reçois l'erreur:
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: ''
Comment lire cette erreur et que faire?
Avez-vous remarqué que vous ne recevez pas l'erreur si vous exécutez
python ./script.py
au lieu de
python script.py
Ceci est dû au fait sys.argv[0]
Je vais le lire ./script.py
dans le premier cas, ce qui donne os.path.dirname
quelque chose avec lequel travailler. Lorsque vous ne spécifiez pas de chemin, sys.argv[0]
lit simplement script.py
, et os.path.dirname
ne peut pas déterminer un chemin.
J'ai eu cette erreur car je fournissais une chaîne d'arguments à subprocess.call
au lieu d'un tableau d'arguments. Pour éviter cela, utilisez shlex.split
:
import shlex, subprocess
command_line = "ls -a"
args = shlex.split(command_line)
p = subprocess.Popen(args)
Utilisez os.path.abspath()
:
os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
sys.argv[0]
Dans votre cas est juste un nom de script, pas de répertoire, donc os.path.dirname()
renvoie une chaîne vide.
os.path.abspath()
transforme cela en un chemin absolu correct avec le nom du répertoire.