文档章节

Python导入C的头文件

amita
 amita
发布于 2017/04/10 16:51
字数 356
阅读 19
收藏 0
点赞 0
评论 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
博文 10
码字总数 5655
作品 0
广州
程序员
0. Python3源码—编译

0.1. 整体架构 在最高的层次上,Python的整体架构可以分为三个主要的部分: 左:Python提供的大量的模块、库以及用户自定义的模块; 右:Python的运行时环境,包括对象/类型系统(Object/Ty...

whj0709 ⋅ 06/06 ⋅ 0

Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )

前面我们介绍的Python网络爬虫通常将抓取的数据存储至TXT或CSV文件,而当数据量增加之时,就需要将其存储至本地数据库了。Python访问数据库需要对应的接口程序,我们可以把接口程序理解为Pyt...

eastmount ⋅ 04/25 ⋅ 0

[Python源码学习] 之 Python解释器

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

晨曦之光 ⋅ 2012/05/08 ⋅ 0

手把手 | 哇!用R也可以跑Python了

     大数据文摘作品   编译:大茜、钱天培   R还是Python?   真是个千古难题!   如果你主要从事数据分析、统计建模和可视化,R大概是你的不二之选。但如果你还想来搞点深度学...

大数据文摘 ⋅ 04/19 ⋅ 0

Python 新功能:或将允许安全工具查看运行时操作

针对 Python 编程语言的新功能提议之一是希望为运行时添加“透明度”,并让安全和审计工具查看 Python 何时可能运行潜在危险的操作。 在当前的形式下,Python 不允许安全工具查看运行时正在执...

达尔文 ⋅ 05/30 ⋅ 0

python笔记:第三方库pygame安装

1.pygame支持普遍的2D游戏开发,这次主要记录自己安装pygame的一些步骤。 2.先确定你的python解释器是哪个版本,我的是3.6的版本,等等安装的pygame也要下载相对应的版本 3.先确保你的pytho...

qq_39191687 ⋅ 05/28 ⋅ 0

Python中os与sys两模块的区别

前言 os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functionality. 这个模块提供了一种方便的使用操作系统函数的方法。 sys:...

xiaoge2016 ⋅ 04/22 ⋅ 0

各种 Python 实现的简单介绍与比较

(点击上方公众号,可快速关注) 编译:Daetalus http://python.jobbole.com/82703/ 当谈到Python时,一般指的是CPython。但Python实际上是一门语言规范,只是定义了Python这门语言应该具备哪...

Python开发者 ⋅ 04/25 ⋅ 0

一张图认识Python(附基本语法总结)

一张图带你了解Python,更快入门, 视频介绍>>>> 简单学Python安全简单学Python安全">http://edu.51cto.com/center/course/lesson/index?id=263601)简单学Python安全 Python基础语法总结: ......

安全牛课堂 ⋅ 05/22 ⋅ 0

Python __init__.py 作用详解

原文地址:https://www.cnblogs.com/Lands-ljk/p/5880483.html init.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有init.py 文件。 通常init.py 文件为空,但是...

oldpan ⋅ 2017/11/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iExec Blockchain Marketplace for Cloud

iExec Releases the First-Ever Blockchain Marketplace for Trading Cloud Computing Berlin, Germany, May 29, 2018. iExec has released its blockchain-based decentralized cloud marke......

openthings ⋅ 14分钟前 ⋅ 0

OSChina 周二乱弹 —— 加班的代码不要枉费了我的童子功

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《29》- 未完成乐队 《29》- 未完成乐队 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :#看球提醒# 02:00 巴西v...

小小编辑 ⋅ 33分钟前 ⋅ 11

Docker Swarm的前世今生

概述 在我的《Docker Swarm集群初探》一文中,我们实际体验了Docker Swarm容器集群技术的魅力,与《Kubernetes实践录》一文中提到的Kubernetes集群技术相比,Docker Swarm没有Kubernetes显得...

CodeSheep ⋅ 今天 ⋅ 0

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 今天 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部