Versión: todas.
Linux
No para mi sorpresa, la solución en Linux fue ejecutar un simple comando especificando si la entrada debe abrirse (eject) o cerrarse (eject -t). Afortunadamente Python incorpora un gran soporte para ejecutar comandos o lanzar nuevos procesos a través del módulo subprocess.
from subprocess import call
call("eject") # Abrir.
call(["eject", "-t"]) # Cerrar.
Dada la ausencia de dicho módulo en versiones anteriores a la 2.4, consideren como una segunda opción la convencional aunque poco recomendada os.system().
from os import system
system("eject")
system("eject -t")
Windows
Se utiliza la función mciSendString, que permite enviar un comando a un dispositivo multimedia. El conjunto de operaciones que soporta MCI es bastante amplio; en este caso, bastará con la implementación del comando set, que establece los ajustes especificados a un determinado dispositivo. La llamada a la API de Windows se realiza vía el módulo ctypes.
from ctypes import windll
windll.winmm.mciSendStringA("set cdaudio door open", None, 0, 0) # Abrir.
windll.winmm.mciSendStringA("set cdaudio door closed", None, 0, 0) # Cerrar.
Usuarios de pywin32 tendrán que conformarse con esta implementación como producto de la ausencia del soporte de las funciones de MCI.
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.