Escapar de argumentos de comando en llamadas a os.system()
Cuando se trabaja con os.system() en Python, es fundamental garantizar el manejo adecuado de los argumentos. crucial. Los archivos y otros parámetros a menudo requieren escape para evitar interferencias con los comandos del shell. Aquí hay una guía completa para escapar de manera efectiva de argumentos para varios sistemas operativos y shells, particularmente bash:
Usar comillas
La solución más simple es encerrar los argumentos entre comillas. Las comillas simples (') evitan la expansión del shell, mientras que las comillas dobles (") permiten la sustitución de variables pero suprimen la expansión de variables dentro de la cadena entrecomillada. Este enfoque es ampliamente compatible en diferentes plataformas y shells, incluido bash:
os.system("cat '%s' | grep something | sort > '%s'"
% (in_filename, out_filename))
Uso del módulo shlex
Python proporciona el módulo shlex diseñado específicamente para este propósito. Su función quote() escapa correctamente las cadenas para su uso en shells POSIX, incluido 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))
Uso del módulo pipes (¡Advertencia de obsolescencia!)
Para las versiones de Python 2.x y 3.x hasta 3.10, pipes.quote del El módulo de tuberías obsoleto se puede utilizar como alternativa a shlex.quote. Tenga en cuenta que a partir de Python 3.11, las tuberías están marcadas para su eliminación:
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))
Como regla general, por razones de seguridad, la entrada generada por el usuario no debe conectarse directamente a las llamadas al sistema sin la validación y desinfección adecuadas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3