Lors de l'utilisation de l'os.système (), il est souvent nécessaire de s'échapper de noms de fichiers et d'autres arguments passés en paramètres aux commandes. Comment puis-je faire cela? De préférence quelque chose qui pourrait fonctionner sur plusieurs systèmes d'exploitation/coques mais en particulier pour bash.
Je suis actuellement en train de faire la suite, mais je suis sûre qu'il doit être une fonction de la bibliothèque pour cela, ou au moins un de plus élégant/robuste/efficace:
def sh_escape(s):
return s.replace("(","\\(").replace(")","\\)").replace(" ","\\ ")
os.system("cat %s | grep something | sort > %s"
% (sh_escape(in_filename),
sh_escape(out_filename)))
Edit: j'ai accepté la réponse la plus simple de l'utilisation des citations, je ne sais pas pourquoi je n'avais pas pensé à ça; je suppose que parce que je venais de Windows où " et " se comporter un peu différemment.
Concernant la sécurité, je comprends l'inquiétude, mais, dans ce cas, je suis intéressé par une solution rapide et facile du système d'exploitation.system() fournit, et la source des cordes n'est pas généré par l'utilisateur, ou au moins entré par un utilisateur de confiance (moi).