Comment échapper correctement aux arguments de commande dans les appels « os.system() » de Python ?

Mary-Kate Olsen
Libérer: 2024-10-29 05:48:02
original
868 Les gens l'ont consulté

How to Properly Escape Command Arguments in Python's `os.system()` Calls?

Échapper aux arguments de commande dans les appels os.system()

Lorsque vous travaillez avec os.system() en Python, il est important de garantir une gestion appropriée des arguments crucial. Les fichiers et autres paramètres nécessitent souvent un échappement pour éviter toute interférence avec les commandes du shell. Voici un guide complet pour échapper efficacement aux arguments de divers systèmes d'exploitation et shells, en particulier bash :

Utiliser des guillemets

La solution la plus simple consiste à mettre les arguments entre guillemets. Les guillemets simples (') empêchent l'expansion du shell, tandis que les guillemets doubles (") autorisent la substitution de variables mais suppriment l'expansion des variables dans la chaîne entre guillemets. Cette approche est largement prise en charge sur différentes plates-formes et shells, y compris bash :

<code class="python">os.system("cat '%s' | grep something | sort > '%s'" 
          % (in_filename, out_filename))</code>
Copier après la connexion

Utilisation du module shlex

Python fournit le module shlex spécialement conçu à cet effet. Sa fonction quote() échappe correctement les chaînes pour une utilisation dans les shells POSIX, y compris bash :

<code class="python">import shlex

escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))</code>
Copier après la connexion

Utilisation du module pipes (avertissement de dépréciation !)

Pour les versions 2.x et 3.x de Python jusqu'à 3.10, pipes.quote du module pipes obsolète peut être utilisé comme alternative à shlex.quote. Sachez qu'à partir de Python 3.11, les tuyaux sont marqués pour être supprimés :

<code class="python">from pipes import quote

escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
          escaped_in_filename, escaped_out_filename))</code>
Copier après la connexion

En règle générale, pour des raisons de sécurité, les entrées générées par l'utilisateur ne doivent pas être directement connectées aux appels système sans validation et désinfection appropriées.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal