python oo接口到libcdio(cd输入和控制库)
pycdio的Python项目详细描述
简介
pycdio是指向libcdio的python接口,cd输入和 控制库http://www.gnu.org/software/libcdio
您可以在libcdio的同一个位置获取源: ftp://ftp.gnu.org:/pub/gnu/libcdio/
pycdio和libcdio库封装了cd-rom读取和 控制。希望忽略操作系统的python程序-和 CD-ROM的设备相关属性可以使用此库。
示例用法
获取CD-ROM驱动器信息
importsysimportcdio,pycdiotry:d=cdio.Device(driver_id=pycdio.DRIVER_UNKNOWN)drive_name=d.get_device()exceptIOError: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 CDcdt=d.get_cdtext()i_tracks=d.get_num_tracks()i_first_track=pycdio.get_first_track_num(d.cd)fortinrange(i_first_track,i_tracks+i_first_track):foriinrange(pycdio.MIN_CDTEXT_FIELD,pycdio.MAX_CDTEXT_FIELDS):value=cdt.get(i,t)# value can be empty but exist, compared to NULL valuesifvalueisnotNone:print("\t%s: %s"%(pycdio.cdtext_field2str(i),value))passpasspassreturnd.close()
其他示例代码可以在发行版的example目录中找到。
要求
- 一种C编译器,以便在安装扩展时对其进行编译。
- libcdio(http://www.gnu.org/software/libcdio)及其头文件已安装。
- 开关http://www.swig.org
- 包装配置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问题
我已经试着让它回到Python2.3左右。
不过,我注意到各种各样的问题。
如果您在运行进行检查时看到这样的消息::
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
在最近的ditutilsunixcompiler.py中复制,如下所示:
$ cp admin-tools/unixccompiler.py /home/rocky/.pyenv/versions/3.5.6/lib/python3.5/distutils/unixccompiler.py
distutils发行版表示,它试图与2.3版的所有python版本兼容。这个 管理工具中的unixcompiler.py来自python 3.7.4发行版。
完整性
libcdio相当大,但仍可能增长一点。
pycdio中的内容是不完整的;随着时间的推移,它可能会增长到完成 取决于各种因素:例如兴趣,是否有人帮助 出去。
当前缺少的libcdio部分是(scsi)mmc 命令和cdparanoia库。在音频控制中,我加入了 那些不需要思考的东西。ISO 9660库是 非常完整,除了文件stat()之外,目前的信息是 非常小。
也就是说,里面的东西很有用。它可能包含更多 比大多数不使用的媒体播放器的访问能力 libcdio有。
swig的封装分为两部分。低级Python 接口名为pycdio,由swig生成。
更面向对象的模块是cdio;它是一个python类 使用pycdio。尽管pycdio本身是完全可用的,但它是 希望cdio是大多数人会用到的。作为pycdio更多 紧密地模拟c接口,可以想象(如果不可能的话) 非常熟悉该界面的死硬libcdio c用户 可能更喜欢。
可能可以通过这样的方式来改变开关量 这些碎片。但是也有问题。首先,我没有那么多 一个游泳专家。第二,它看起来好像产生了swig代码 会更复杂。第三,分离使翻译 直截了当地理解和维护:首先获取c中的内容 作为一对一的翻译。然后我们实施一些 从那抽象出来。抽象可以在没有 必须重做基础的翻译。(但反过来是 通常不正确:通常更改为c-to-python转换, pycdio,确实会导致对 抽象层cdio.)
有很多事情要做-你想帮忙,请这样做!
虽然许多方法都缺少独立的文档, 类和函数有一些文档字符串。另请参见 示例目录中的程序。