Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

backslash :: protection chaine pour commande externe

11 réponses
Avatar
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 ;-(

une idée de comment m'en sortir ?

Eric

1 réponse

1 2
Avatar
Eric Deveaud
Philippe Bouige wrote:
Le 17-11-2009, Eric Deveaud a écrit :
> Bonjour,
>
> je sèche sur un problème que je pensait simple.

J'ai trouvé cette solution, mais je n'ai pas mieux :-)

>>> from subprocess import Popen
>>>
>>> escape = " "[0]



merci.

tout simple. une solution élégante.

Eric
1 2