É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>
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>
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>
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!