文档章节

Python导入C的头文件

amita
 amita
发布于 2017/04/10 16:51
字数 356
阅读 752
收藏 0

1. 需求

经常有音频转文字的需求,讯飞听见网站效果还不错,赠送5小时免费转写时间,但用完了
想到讯飞有语音开放平台,过去一看,转写SDK还是要买时间,但语音听打接口是免费的,那就试试
费了点劲注册为开发者,下载了LInux C SDK,测了下demo,没问题。为了速度,还是用 Python 调接口吧,看上去 ctypes 实现比较自然。

2. 问题:

SDK 头文件里用enum定义了400+的错误码,为了方便调试,打算导成Python的enum定义(>=3.4)。手动拷贝感觉不爽,而且里面混杂着注释

3. 思路:

SDK库的符号表(被strip过了)
C语言分析器(不考虑)
手动清理复制(算了)

4. 选择:

还是用 gawk(比awk强大)处理下好了,比手动好点,说不准以后还能用...

5. 代码:

BEGIN {                         
    RS = "\r\n|{|}|\n"  # less is good for comment handling
    skip = 0

    print "#!/usr/bin/env python3"
    print "# -*- coding: UTF-8 -*-", "\n"
    print "from enum import Enum", "\n"
}

{
    while ($1 == "")
        next
}

# skip one-line comment, no use?
/^[[:blank:]]*(\/\/|#)/ {
    next
}

# skip comment
/^[[:blank:]]*\/\*/,  /\*\// {
    next
}

# get enum definitions
/^enum/, /;/ {
    subn = 0
    for (i=1; i<=NF; i++)
    {
        switch ($i) {
        case /^enum/: printf("class(Enum):")  #header
            break
        case /^;$/: printf("\n")  #tail
            next
        case /^(\/\/|\/\*)/:  #skip comment
            next
        default:  #body
            if (i == 1) printf("\t")
            subn = sub(/,/, "\n", $i)
            printf("%s ", $i)
            break
        }
    }
    if (subn == 0) printf("\n")
}

END {                           
    print "# end of", FILENAME
}

© 著作权归作者所有

amita
粉丝 7
博文 13
码字总数 11671
作品 0
广州
程序员
私信 提问
加载中

评论(0)

Python与C/C++相互调用(转)

原文链接 作者 一、问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结。 二、Python调用C/C++ 1、Python调用C动态链接库 Python调用C库比较简单,不经过任何...

osc_nhwfplmt
2019/09/18
3
0
QT 调用Python文件流程

环境:Qt 5.5.1 (MSVC 2013, 32 bit) Python3.8 32bit (1)首先需要引用Python的库文件以及头文件导入 INCLUDEPATH +=C:UsersAdministratorAppDataLocalProgramsPythonPython38-32include LIB......

紫色_麦迪
05/19
0
0
SylixOS Python扩展库开发

1 适用范围 本文档适用于希望使用基于SylixOS进行Python扩展库开发的用户。 2 SylixOS Python简介 Python是一门面向对象的解释型的脚本语言,Python具有丰富和强大的库。它常被昵称为胶水语言...

zhaotongch
2018/09/03
48
0
『Python CoolBook』C扩展库_其一_用法讲解

不依靠其他工具,直接使用Python的扩展API来编写一些简单的C扩展模块。 本篇参考PythonCookbook第15节和Python核心编程完成,值得注意的是,Python2.X和Python3.X在扩展库写法上略有不同,我...

osc_4rna5n4p
2018/05/24
3
0
[Python源码学习] 之 Python解释器

源码结构 下载Python的源码,解压,即可看到源码的目录结构。 奇怪:Python2.7.2根目录下的 README 文件中有 各个目录的说明,在 Python3.2.1根目录下的README文件中却没有相应的介绍了。 In...

晨曦之光
2012/05/08
622
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux中实用但很小众的11个炫酷终端命令

今天给大家分享Linux总结出来的11个炫酷的Linux终端命令大全,通过今天这篇文章将向大家展示一系列的Linux命令、工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我。...

osc_50znnx42
17分钟前
5
0
GPRS(Air202) Lua开发: GPIO中断

1.原理图 2.配置GPIO5中断,上拉输入 1.点击按钮进入下降沿中断 2.松开按钮进入上升沿中断 module(...,package.seeall) --固定写法,具体百度lua文件加载(初学者不需要考虑,直接写上这句话即可...

osc_mf7xwvy6
19分钟前
18
0
相机激光标定算法:从理论到实践

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 本文是标定系列解读第三篇,介绍了Camera-Lidar标定,通过对一些基础知识和小细节进行讨论和理论推导,给出了一些可以提升标定精度的...

osc_s2b5kacl
20分钟前
10
0
webpack4.0 把自己总结'吐'的一篇文章

上大学的时候老师讲一门语言,上来的第一节课就是配置各种环境,而通常看到那些脑袋都是一种快要炸的状态🤯。随着后来对Linux的学习之后发现,并没有那么头疼配置的东西(对于命令这么复杂...

osc_mor4smaq
21分钟前
15
0
实现一个“真”的网页

@一个“真”的网页 实现一个真的网页~ 经过了前几次的实验,相信大家已经对网页布局有了初步的了解,那么这一次就让我们来做个“真网页”吧!复制代码 文章展示页是非常非常常见的东西,几...

osc_7ekszy4a
23分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部