Maison  >  Article  >  développement back-end  >  Comment puis-je échapper en toute sécurité aux noms de fichiers et aux arguments pour les appels os.system() en Python ?

Comment puis-je échapper en toute sécurité aux noms de fichiers et aux arguments pour les appels os.system() en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 21:10:02899parcourir

How can I safely escape filenames and arguments for os.system() calls in Python?

Échapper aux arguments pour les appels os.system()

Lors de l'utilisation de os.system() pour exécuter des commandes de ligne de commande, la nécessité d'échapper aux noms de fichiers et aux arguments passés comme paramètres se pose, en particulier dans les systèmes d'exploitation tels que bash. Voici une méthode efficace pour y parvenir :

Fonction d'échappement utilisant shlex.quote()

Python 3 propose une fonction d'échappement pratique nommée shlex.quote(). Cette fonction convertit efficacement n'importe quelle chaîne en une version correctement échappée qui peut être utilisée en toute sécurité comme argument dans les appels os.system().

<code class="python">import shlex
os.system(shlex.quote("cat %s | grep something | sort > %s" % (in_filename, out_filename)))</code>

Fonction d'échappement pour Python 2 et 3

Si vous avez besoin d'une compatibilité descendante avec Python 2, vous pouvez utiliser la fonction pipes.quote au lieu de shlex.quote(). Cependant, notez que les tuyaux sont obsolètes dans Python 3.10 et seront supprimés dans Python 3.13.

<code class="python">import pipes
os.system(pipes.quote("cat %s | grep something | sort > %s" % (in_filename, out_filename)))</code>

Remarque supplémentaire sur la sécurité

Pendant que os.system() offre une méthode simple pour exécuter des commandes, il est essentiel d'être conscient des problèmes de sécurité. Faites preuve de prudence lorsque vous acceptez des commentaires provenant de sources non fiables.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn