É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 :
os.system("cat '%s' | grep something | sort > '%s'"
% (in_filename, out_filename))
Utilisation du module shlex
Python fournit le module shlex spécialement conçu à cet effet. Sa fonction quote() échappe correctement aux chaînes à utiliser dans les shells POSIX, y compris bash :
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))
Utilisation du module pipes (Avertissement de dépréciation !)
Pour les versions Python 2.x et 3.x jusqu'à 3.10, pipes.quote du Le module de tuyaux 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 :
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))
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 nettoyage appropriés.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3