backslash :: protection chaine pour commande externe
11 réponses
Eric Deveaud
Bonjour,
je sèche sur un problème que je pensait simple.
comment traiter des chaines de caratères pour protéger certains
caractéres avant de les passer au shell
j'utilise Popen avec shell=True (et j'ai besoin de shell=True)
pour récupérer des résultats de comandes externes
il se trouve qu'un cas d'utilisation me pose soucis.
les noms de fichiers à passer à mes commande comportent des
caractères qu'il me faut protéger (espace, parenthèses,
accolades et autre caractères particuliers pour le shell)
naïvement j'ai fait une boucle pour remplacer tout caractère non
alphanumérique par backslash suivi de ce caractère.
def protect_file(mmfile):
new = []
char_accepted = string.ascii_letters + string.digits +
os.path.sep
escape = '\\'
for c in mmfile:
if c in char_accepted:
new.append(c)
else:
new.append(escape + c)
return ''.join(new)
le hic, c'est que du coup j'introduit 2 backslah dans ma chaine,
celle ci etant passée telle qu'elle au shell. bien évidement
l'effet n'est pas du tout celui voulu ;-(