Есть ли команда, которая определяет, открыт ли ящик CD или закрыт?

Есть ли команда, которую вы можете запустить в сценарии оболочки, который обнаружит, что лоток для компакт-диска открыт или закрыт, и верните 1 или 0 в зависимости от того, было ли это (или что-то легко интерпретировать)?

В настоящее время я выполняю команду open и время, необходимое для выполнения. Если он почти мгновен, он открыт. Если это занимает время, оно было открыто и теперь закрыто.

Мне нужен метод, который не включает изменение текущего состояния - просто его обнаружение.

1
задан 7 April 2018 в 07:45

1 ответ

На основе кода 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 скажет вам, закрыт ли лоток и есть диск.

3
ответ дан 24 May 2018 в 06:38
  • 1
    Примечание для Python 3.6 : «Удалены недокументированные модули IN, CDROM, DLFCN, TYPES, CDIO и STROPTS. Они были доступны в специализированных каталогах Lib/plat-*/ для платформы, но были хронически устаревшими, непоследовательно доступными на разных платформах и не поддерживались. & Quot; – muru 7 April 2018 в 05:19
  • 2
    Спасибо за редактирование и примечание Python 3.6 @muru ... если CDROM.py недоступен, то константы можно найти по адресу: github.com/torvalds/linux/blob/master/include/uapi / Linux / & hellip; – gstein 7 April 2018 в 07:36

Другие вопросы по тегам:

Похожие вопросы: