En utilisant python et argparse, l'utilisateur peut entrer un nom de fichier avec -d comme indicateur.
parser.add_argument("-d", "--dmp", default=None)
Cependant, cela a échoué lorsque le chemin comprenait des espaces. Par exemple.
-d C:\SMTHNG\Name with spaces\MORE\file.csv
REMARQUE: les espaces provoqueraient une erreur (l'indicateur prend uniquement en entrée 'C: SMTHNG\Name').
error: unrecognized arguments: with spaces\MORE\file.csv
Cela m'a pris plus de temps que nécessaire pour trouver la solution à ce problème ... (je n'ai pas trouvé de questions/réponses pour cela, donc je fais mon propre post)
Solution simple: argparse considère une chaîne remplie d'espace comme un seul argument si elle est encapsulée par des guillemets.
Cette entrée a fonctionné et "résolu" le problème:
-d "C:\SMTHNG\Name with spaces\MORE\file.csv"
AVIS: l'argument "" l'entoure.
Pour ceux qui ne peuvent pas analyser les arguments et qui obtiennent toujours "erreur: arguments non reconnus:" J'ai trouvé une solution de contournement:
parser.add_argument('-d', '--dmp', nargs='+', ...)
opts = parser.parse_args()
puis quand vous voulez l'utiliser, faites-le
' '.join(opts.dmp)
Je suis aussi tombé sur ce problème aujourd'hui.
-d "foo bar"
n'a pas aidé. Je devais ajouter le signe égal
-d="foo bar"
et puis ça a marché.
Après quelques expériences (python 2.7 Win10), j'ai découvert que la règle d'or est de mettre des guillemets ("") autour des arguments qui contiennent des espaces et de faire PAS mettre si il n'y a pas d'espaces dans l'argument. Même si vous passez une chaîne/un chemin. Mettre des guillemets simples ('') est également une mauvaise idée, au moins pour Windows.
Petit exemple: python script.py --path ....\Some_Folder\--string "Voici une chaîne"