Python面向对象的libcdio(CD输入和控制库)接口
项目描述
简介
pycdio是https://gnu.ac.cn/software/libcdio的Python接口,即CD输入和控制库
您可以在与libcdio相同的地方获取源代码:ftp://ftp.gnu.org:/pub/gnu/libcdio/
pycdio和libcdio库封装了CD-ROM的读取和控制。希望忽略CD-ROM的OS和设备相关属性的Python程序可以使用此库。
示例用法
获取CD-ROM驱动信息
import sys
import cdio, pycdio
try:
d = cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)
drive_name = d.get_device()
except IOError:
print("Problem finding a CD-ROM")
sys.exit(1)
ok, vendor, model, release = d.get_hwinfo()
print("drive: %s, vendor: %s, model: %s, release: %s" \
% (drive_name, vendor, model, release))
# Show CD-Text for an audio CD
cdt = d.get_cdtext()
i_tracks = d.get_num_tracks()
i_first_track = pycdio.get_first_track_num(d.cd)
for t in range(i_first_track, i_tracks + i_first_track):
for i in range(pycdio.MIN_CDTEXT_FIELD, pycdio.MAX_CDTEXT_FIELDS):
value = cdt.get(i, t)
# value can be empty but exist, compared to NULL values
if value is not None:
print("\t%s: %s" % (pycdio.cdtext_field2str(i), value))
pass
pass
pass
return
d.close()
其他示例代码可以在发行版的example目录中找到。
要求
需要一个C编译器以便在安装时编译扩展。
安装libcdio(https://gnu.ac.cn/software/libcdio)及其头文件。
SWIG http://www.swig.org
pkg-config http://pkg-config.freedesktop.org
在Debian(例如Ubuntu)上构建
$ apt-get install python-dev $ apt-get install libcdio-dev $ apt-get install libiso9660-dev $ apt-get install swig pkg-config $ pip install -e . $ make check
SWIG问题
我已经尝试使其从Python 2.3或更高版本工作。
然而,我在各种distutils中遇到了问题。
当运行make check时,如果您看到类似的消息
File "/home/rocky/.pyenv/versions/3.5.6/lib/python3.5/distutils/unixccompiler.py", line 207, in library_dir_option return "-L" + dir TypeError: Can't convert 'bytes' object to str implicitly
复制最近distutils中的unixccompiler.py,如下所示
$ cp admin-tools/unixccompiler.py /home/rocky/.pyenv/versions/3.5.6/lib/python3.5/distutils/unixccompiler.py
distutils 分发工具表明它试图与所有 2.3 版本以上的 Python 兼容。在 admin_tools 中使用的 unixccompiler.py 来自 Python 3.7.4 分发。
完整性
libcdio 比较大,但仍可能略有增长。
pycdio 中包含的内容不完整;随着时间的推移,它可能会根据各种因素(例如,兴趣,其他人是否提供帮助)而变得完整。
目前缺少的 libcdio 部分是 (SCSI) MMC 命令和 cdparanoia 库。在音频控制方面,我放入了那些不需要任何思考的东西。ISO 9660 库相当完整,除了目前相当简陋的文件 stat() 信息。
尽管如此,其中包含的内容非常实用。它可能比不使用 libcdio 的大多数媒体播放器具有更多的访问能力。
SWIG 的封装分为两部分。较低级的 Python 接口称为 pycdio,由 SWIG 生成。
更面向对象的模块是 cdio;它是一个使用 pycdio 的 Python 类。尽管 pycdio 独立使用时完全可行,但预计大多数人会使用 cdio。由于 pycdio 更接近于模拟 C 接口,因此对于非常熟悉该接口的 libcdio C 用户来说,选择它是有可能的(尽管可能性不大)。
可能有可能以这种方式修改 SWIG 来组合这些部分。然而,存在以下问题。首先,我不是一个 SWIG 专家。其次,生成的 SWIG 代码可能更复杂。第三,分离使得翻译非常直接易懂且易于维护:首先将 C 中的内容转换为 Python,作为一对一的翻译。然后我们基于此实现一些抽象。抽象可以修改而不必重新进行底层翻译。(但反过来通常不是这样:通常对 C-to-python 翻译,pycdio 的更改会导致抽象层 cdio 中的小而明显且简单的更改。)
还有很多事情要做 - 如果你想要帮忙,请这样做!
虽然许多方法、类和函数都有一些文档字符串,但缺少独立文档。请参阅示例目录中的程序。
企业版 pycdio
作为 Tidelift 订阅的一部分提供。
pycdio 和成千上万个其他包的维护者正在与 Tidelift 合作,为构建应用程序时使用的开源依赖项提供商业支持和维护。节省时间,降低风险,并提高代码质量,同时为使用的确切依赖项的维护者付费。了解更多信息请访问 这里。
安全联系方式
要报告安全漏洞,请使用 Tidelift 安全联系方式,Tidelift 将协调修复和披露。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建发行版
pycdio-2.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61734db8c554b7b1a2cb2da2e2c15d3f9f5973a57cfb06f8854c38029004a9f8 |
|
MD5 | 0d0e293ad18ecdda2c04a2afb95bd28c |
|
BLAKE2b-256 | 7302e482cd03681c641aba3863216029814443c023ac772ea5c638b3ff8e699f |
pycdio-2.1.1-py3.9-linux-x86_64.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e72c896cc02b2282e6fdc66b16682820e8bb8d0764ca3efbd43481a450c02432 |
|
MD5 | d238dbd0707dffb75baf46403fac9592 |
|
BLAKE2b-256 | c49daaff18c098fb6a9ab7f98beaf3e8291858d006af7dc49716421553ea236c |
pycdio-2.1.1-py3.8-linux-x86_64.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ea304e496c91c6eab219c053e9cad8b976bac70df9e43e5b362787c33a3f445d |
|
MD5 | 169808b9c8b87195f4cd3bbf11f7467c |
|
BLAKE2b-256 | a09779c087f08e8f35ab80e511d1389ac35d680b6f9266afaa54adb91570f889 |
pycdio-2.1.1-py3.7-linux-x86_64.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 18c34df4f05064037c264310791a96f63d5b69de69cda87720e0e9a6c0ad320b |
|
MD5 | f5377d83d86e2d33d7af89717d781c07 |
|
BLAKE2b-256 | 70156a654ae04d9cec38650f83dd4c5e4fd610a6671782c1758ade3ee674ad2f |
pycdio-2.1.1-py3.6-linux-x86_64.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2f5adf9076b985cd47bdeca365f020abdb9e400a1d90effab3832b23f496ab94 |
|
MD5 | 583195ef19718832bd51f5bfc2b6608f |
|
BLAKE2b-256 | 0974096e9474bbb72f0b522c9d32bef2ad3b0184ec3493ef899652767b2a69dc |