Anda dapat memperoleh informasi tentang perangkat blok apa pun menggunakan perintah blkid
.
[[email protected] ~]# blkid /dev/sr0
/dev/sr0: UUID="2013-05-31-23-04-19-00" LABEL="ARCH_201306" TYPE="iso9660" PTTYPE="dos"
[[email protected] ~]# echo $?
0
Jika saya menghapus disk, saya tidak mendapatkan output apa pun dan nilai keluar adalah 2. (0 berarti sukses. Nilai bukan nol biasanya berarti terjadi sesuatu yang tidak normal atau terjadi kesalahan)
[[email protected] ~]# blkid /dev/sr0
[[email protected] ~]# echo $?
2
setcd -i
(dalam setcd
paket, setidaknya di Debian) dapat memberi tahu Anda status drive. Tidak seperti beberapa pendekatan lain (mount setidaknya, mungkin blkid juga), ini tidak coba tutup baki , bahkan pada drive yang mampu melakukan itu. (Yang benar-benar menjengkelkan jika mencoba menutup Anda saat Anda memasukkan disk).
Dengan baki terbuka:
$ setcd -i /dev/sr0 /dev/sr0: CD tray is open
Tepat setelah menutup baki:
$ setcd -i /dev/sr0 /dev/sr0: Drive is not ready
Setelah siap:
$ setcd -i /dev/sr0 /dev/sr0: Disc found in drive: data disc type 1 Volume name: «name» Publisher: MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2005030913034700�2005030913034700�0000000000000000 Data preparer: MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2005030913034700�2005030913034700�0000000000000000
Tertutup, tetapi tidak ada disk:
$ setcd -i /dev/sr0 /dev/sr0: No disc is inserted
Anda dapat dengan mudah membuat skripnya:
while true; do
cdinfo=$(setcd -i "$dev")
case "$cdinfo" in
*'Disc found'*)
break;
;;
*'not ready'*)
echo '(waiting for drive to be ready)' >&2;
sleep 3;
;;
*'is open'*)
echo '(drive is open)' >&2;
sleep 5;
;;
*)
printf 'Confused by setcd -i, bailing out:\n%s\n' "$cdinfo" &2
exit 1
esac
done
Anda dapat melakukan hal berikut dengan Python3 dan pustaka standar:
import fcntl
import os
CDROM_DRIVE = '/dev/sr0'
def detect_tray(CDROM_DRIVE):
"""detect_tray reads status of the CDROM_DRIVE.
Statuses:
1 = no disk in tray
2 = tray open
3 = reading tray
4 = disk in tray
"""
fd = os.open(CDROM_DRIVE, os.O_RDONLY | os.O_NONBLOCK)
rv = fcntl.ioctl(fd, 0x5326)
os.close(fd)
print(rv)