跳转到主要内容

Python面向对象的libcdio(CD输入和控制库)接口

项目描述

Package Status 1 Package Status 2 Pypi Installs

简介

pycdio是https://gnu.ac.cn/software/libcdio的Python接口,即CD输入和控制库

您可以在与libcdio相同的地方获取源代码:ftp://ftp.gnu.org:/pub/gnu/libcdio/

pycdiolibcdio库封装了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目录中找到。

要求

在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 (246.6 kB 查看哈希值)

上传时间 源代码

构建发行版

pycdio-2.1.1-py3.9-linux-x86_64.egg (464.6 kB 查看哈希值)

上传时间 源代码

pycdio-2.1.1-py3.8-linux-x86_64.egg (457.1 kB 查看哈希值)

上传时间 源代码

pycdio-2.1.1-py3.7-linux-x86_64.egg (446.3 kB 查看哈希值)

上传时间 源代码

pycdio-2.1.1-py3.6-linux-x86_64.egg (444.2 kB 查看哈希值)

上传时间 源代码

pycdio-2.1.1-py3.5-linux-x86_64.egg (444.4 kB 查看哈希值)

上传时间 源代码

pycdio-2.1.1-py3.3-linux-x86_64.egg (438.7 kB 查看哈希值)

上传时间 源代码

pycdio-2.1.1-py2.7-linux-x86_64.egg (438.9 kB 查看哈希值)

上传时间 源代码

由以下支持