Есть ли команда, которую вы можете запустить в сценарии оболочки, который обнаружит, что лоток для компакт-диска открыт или закрыт, и верните 1 или 0 в зависимости от того, было ли это (или что-то легко интерпретировать)?
В настоящее время я выполняю команду open и время, необходимое для выполнения. Если он почти мгновен, он открыт. Если это занимает время, оно было открыто и теперь закрыто.
Мне нужен метод, который не включает изменение текущего состояния - просто его обнаружение.
На основе кода C @ terdon я написал версию в Python:
#!/usr/bin/python
import os, fcntl, CDROM, sys
def drive_status(drive):
fd = os.open(drive, os.O_RDONLY | os.O_NONBLOCK)
rv = fcntl.ioctl(fd, CDROM.CDROM_DRIVE_STATUS)
os.close(fd)
return rv
sys.exit(drive_status(sys.argv[1]) != CDROM.CDS_TRAY_OPEN)
Очевидно, что она может использовать некоторую любовь к комментариям и обработке аргументов cmdline, но если вам нужна версия Python .. .
Также обратите внимание, что модуль CDROM может быть специфичным для Linux и что не все диски поддерживают запросы (например, ioctl () вернет CDS_NO_INFO). [!d2 ]
Существуют другие константы CDROM.CDS_*, которые предоставляют полезные варианты. В частности, CDS_DISK_OK скажет вам, закрыт ли лоток и есть диск.