在python绑定/clang中的get-includes中解析cpp文件时过滤目录

2024-07-04

我应该编写一个 python-clang 解析器,它返回 cpp 文件中的所有包含内容。 所以我使用像下面的代码这样的东西:

def _main():
    from clang.cindex import Index
    from optparse import OptionParser

    filter=['/usr/lib','usr/include']
    p=OptionParser()
    (o,a)=p.parse_args()
    i=Index.create()
    t=i.parse(None,a)
    for i in t.get_includes():
        print i.include

if __name__=='__main__':
    _main()

现在我需要过滤一些包含内容,例如特定目录:

filter=['/usr/lib','usr/include']

问题 1:我想知道这种过滤是如何实现的以及我的代码应该如何更改?

问题 2:如何制作一个配置文件来包含所有这些过滤器目录,而不是仅仅将它们硬编码?

要运行测试:您需要有一个 cpp 文件,例如:

  #include<iostream>
  #include"ex1.h"

  int main(){
      return 0;
  }

和 *.h 文件:

 #include<QMap>

run:

./python-clang.py ex1.cpp

结果样本:

 /usr/include/pthread.h
 /usr/include/sched.h
 /usr/include/time.h
 /usr/include/bits/sched.h
 /usr/include/time.h
 /usr/include/bits/time.h
 /usr/include/signal.h
 /usr/include/bits/sigset.h
 /usr/include/bits/pthreadtypes.h
 /usr/include/bits/wordsize.h
 /usr/include/bits/setjmp.h
 /usr/include/bits/wordsize.h
 /usr/include/bits/wordsize.h
 /usr/include/unistd.h
 /usr/include/bits/posix_opt.h
 /usr/include/bits/environments.h
 /usr/include/bits/wordsize.h
 /usr/include/bits/confname.h
 /usr/include/getopt.h
 /usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/i486-linux-gnu/bits      /atomic_word.h
/usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/bits/locale_classes.h
/usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/string
/usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/bits/allocator.h
/usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/i486-linux-gnu/bits/c++allocator.h
/usr/lib/gcc/i486-linux-gnu/4.4/../../../../include/c++/4.4/ext/new_allocator.h

您可以在您的for loop:

...
for i in t.get_includes():
    if not i.include in filter:
        print i.include
...

至于包含排除项的配置文件。你可以这样做:

def _main():
    ...
    with open('/path/to/file/ignore.txt') as f:
        filter = f.readlines()
    ...

Then in ignore.txt:

/usr/lib
/usr/include
...

UPDATE

根据您的评论和对您的问题的编辑。

def _main():
    ...
    with open('/path/to/file/ignore.txt') as f:
        ignore = map(lambda l: l.strip(), f.readlines())

    for i in t.get_includes():
        if not i.include.startswith(ignore):
            print i.include

这里有几点需要注意。

  1. 我改变了变量名filter to ignore since filter是一个内置类型。
  2. 中的行ignore.txt正在拥有\n剥离并映射到 Atuple代替list所以它们可以与startswith读取时的方法。
  3. 您还可以使用列表理解来放置filtered结果 放入稍后使用的列表中。

results = [i.include for i in t.get_includes() if not i.startswith(ignore)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在python绑定/clang中的get-includes中解析cpp文件时过滤目录 的相关文章

  • 测试用户输入数组中的重复项的最有效方法是什么?

    我正在尝试编写一个模拟器来玩强力球彩票 程序会要求5数字 又名白球 并输入到6元素数组和另一个数字 红色强力球 放入6th 元素 我需要弄清楚如何首先测试重复项5元素但6th 不需要是唯一的 我有一个循环 我认为可以工作 但它甚至不执行并且
  • 模板内嵌套 for 循环

    模型 py class Task models Model level models ForeignKey Level on delete models CASCADE todo models ForeignKey ToDo on dele
  • 使用c#在ms access中更新

    有人可以帮助我的代码有什么问题吗 它是一个更新函数 在我的调试过程中它可以正确执行 但它不会更新我的数据库 我已经在寻找这个问题的答案 但仍然没有成功 我还尝试创建一个新的数据库 希望它有问题 但仍然没有效果 private void up
  • 删除超过 7 天的文件

    我看过一些帖子删除特定文件夹中的所有文件 不是文件夹 但我根本不明白它们 我需要使用 UNC 路径并删除所有超过 7 天的文件 Mypath files data APIArchiveFolder 有人有快速脚本 可以专门输入上面的路径来删
  • 如何使文本框的自动完成列表可编辑?

    我有一个包含很多内容的应用程序TextBox使用自动完成的控件 每个人都使用AutoCompleteMode CustomSource从关联的获取自动完成文本AutoCompleteStringCollection 每当用户在其中输入新值时
  • 在 C# 中捕获异常

    我有一个简单的添加按钮 ADD Click 代码是 protected void Add Click object sender EventArgs e string strConnectionString ConfigurationMan
  • 您会在哪里使用友元函数与静态成员函数?

    当我们希望非成员函数访问该类的私有成员时 我们将其设为该类的友元函数 这赋予它与静态成员函数相同的访问权限 两种选择都会为您提供一个不与该类的任何实例关联的函数 什么时候我们必须使用友元函数 什么时候必须使用静态函数 如果两者都是解决问题的
  • 错误:扩展器控件可能无法在 PreRender 之前注册

    我正在尝试将 Ajax 控件添加到我的 aspx 页面 我刚刚添加了
  • 通过“this->member”访问c++成员类比隐式调用“member”更快/更慢

    经过我们的朋友谷歌搜索后 我无法得到以下观点的明确看法 我习惯这样称呼班级成员this gt 即使不需要 我发现它更明确 因为它在维护一些带有大量变量的繁重算法时很有帮助 当我正在研究一种应该优化的算法时 我想知道是否使用this gt 是
  • SerializeObject 抛出 System.OutOfMemoryException

    我对 JsonConvert SerializeObject 有一个严重的问题我需要序列化超过500 000条字典记录才能使序列化抛出以下错误 System OutOfMemoryException 我尝试在 foreach 中单独序列化每
  • 为什么 SendMessage 对某些应用程序不起作用?

    背景 我试图编写一个自动点击器来在后台点击应用程序 Roblox https en wikipedia org wiki Roblox 不尝试做任何恶意的事情 我能够获取该窗口并执行诸如关闭它之类的命令 但是 当尝试将点击发送到窗口时 它会
  • 无法让 python 请求与代理一起使用

    我正在尝试通过代理服务器执行简单的获取请求 import requests test requests get http google com proxies http 112 5 254 30 80 print test text 代码中
  • 过滤(减少)NumPy 数组

    假设我有一个 NumPy 数组arr我想根据 可广播 函数的真值进行逐元素过滤 减少 例如 我只想获取低于某个阈值的值k def cond x return x lt k 有几种方法 例如 使用发电机 np fromiter x for x
  • 如何使信号客户端避免表单身份验证?

    我的 MVC 网站在 web config 中有表单授权 现在所有的页面都需要通过授权才能被查看 但是现在我有一个控制台程序 C 控制台程序 这个程序需要发送一些消息到 SignalR 集线器 但是我的 signalR Hub 在我的 MV
  • 我是否需要显式关闭并处置 SQLConnection?

    SqlDataReader rdr null con new SqlConnection objUtilityDAL ConnectionString using SqlCommand cmd con CreateCommand try i
  • 在 EF core 中启用迁移吗?

    我正在开始使用 EF Core 2 0 我有一个针对 NET 4 6 1 的控制台应用程序 我有一个非常简单的模型类 以及这个上下文 public class ContextCore DbContext protected override
  • .NET 中是否有任何集合可以防止空条目?

    我特别考虑的是履行一套合同的集合 但我认为这个问题可以适用于任何类型 NET 框架中是否存在可以防止空条目的集合 我想要的具体行为是这样的 var set new HashSet bool added set Add null Consol
  • 在头文件 (.h) 中声明构造函数然后在类文件 (.cpp) 中定义 C++ 的语法 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果有人可以解决这个问题 我将不胜感
  • 谷歌模拟 - 我可以在同一个模拟对象上多次调用 EXPECT_CALL 吗?

    如果我打电话EXPECT CALL在同一个模拟对象上两次TEST F 会发生什么 期望是否附加到模拟对象中 或者第二次调用是否消除了第一次调用的效果 I found 后子句 https github com google googletes
  • 获取非通用任务的结果

    有没有办法得到结果Task

随机推荐

  • 在 WCF 服务关闭之前执行操作

    我有一个托管在 IIS7 中的 WCF 服务 该服务有一个静态类 其中包含包含字符串 某种日志 的静态列表 它定期将条目写入文件或数据库 但是 当 IIS 决定回收应用程序或出于任何原因终止时 静态字段中的条目将丢失 有什么方法可以处理服务
  • 在 Bash 中使用大小写表示数字范围

    我正在尝试使用以下方法进行操作case在 Bash 中 在 Linux 中 如果X在460到660之间 则输出X信息 如果 X 介于 661 和 800 之间 请执行其他操作 Etc 现在这就是我所拥有的 case MovieRes in
  • 如何循环调用分页函数?

    我正在尝试使用空气桌API https airtable com api从我的数据中检索记录 具体来说 是我在列单元格中的 URL 列表 我写了一个函数 get airtable records 通过以下方式进行 API 调用curl它可以
  • OpenCV 2.4.6 SIFT 关键点检测使用大量内存

    我们在 openCV 2 4 3 中使用 SIFT 我们决定升级到 openCV 2 4 6 升级后 openCV 2 4 6 中的内存使用量从约 150MB 跃升至 1 2GB 有人知道这是一个错误还是我们现在需要配置的东西吗 我们的图像
  • PHP url 函数和子域

    我有一个网站thenoblesite com 它有一些子域 即 download thenoblesite com壁纸 thenoblesite com etc 子域的页面位于主 htdocs 文件夹中 即 httpdocs downloa
  • 字符串的两半就地交错

    给定一个字符串even尺寸 说 abcdef123456 我如何将两半交错 这样same字符串将变成这样 a1b2c3d4e5f6 我尝试开发一种算法 但失败了 有人能给我一些吗hints至于如何进行 我需要在不创建额外的字符串变量或数组的
  • Android CardView 不适用于 Api 21

    我正在使用安卓CardView它在 Api 21 下完美运行 但是当我在 Api 21 即 Lollipop 上使用它时 XML 属性如下cardElevation cornerRadius不起作用 我究竟做错了什么 这是我的 XML 布局
  • 如何解决“您的系统管理员已将 Chrome 配置为打开备用浏览器进行访问”

    我正在尝试在 google chrome 中打开一个应用程序 当我启动 chrome 网站时 它会重定向到 IE 并在 chrome 中显示消息 您的系统管理员已将 chrome 配置为打开备用浏览器进行访问 如何克服这个问题 Behavi
  • Socket:Python中的2路通信

    我想要在 Python 中进行双向通信 我想绑定到一个客户端可以连接的套接字 然后服务器和客户端可以彼此 聊天 我已经有了基本的监听器 import socket HOST localhost PORT 50008 s socket soc
  • 让所有街道在 Google 地图视口中可见

    我正在尝试使用以下算法构建地图 等待平移或缩放发生 查询视口中可见的所有街道 范围 使用预定义的颜色为每条可见街道着色 Example 我想显示每条街道上的企业数量 或者每条街道上发生的犯罪数量 我有一个数据库 其中包含此类信息 街道名称
  • PHAsset(或 ALAsset)跨设备标识符

    我实际上正在创建一个 iOS 应用程序 并且想要在 SQLite 数据库中存储有关照片库图片的一些详细信息 我还希望能够在用户拥有的不同设备上共享这些数据 想象一下有人想要在他的 iPhone 上重新组织图片 并想要在他的 iPad 上检索
  • 计算已发布字符串中的行数

    我试过这个 PHP 中计算文本区域中的新行以调整容器大小 https stackoverflow com questions 1743745 count new lines in textarea to resize container i
  • 没有可编译的体系结构(ARCHS=i386、VALID_ARCHS=arm64 armv7 armv7s)

    Preface 我确实看过类似的问题 https stackoverflow com questions 22328882 xcode 5 1 no architectures to compile for only active arch
  • 在 Scala 中指定 lambda 返回类型

    注意 这是一个理论问题 我并不是试图解决任何问题 也不是试图达到任何实际效果 在 Scala 中创建 lambda 时使用 arguments gt expression语法 可以显式提供返回类型吗 Lambda 与方法没有什么不同 它们都
  • String.Format() 中的 CultureInfo.CurrentCulture 真的有必要吗?

    您认为确实有必要提供哪些IFormatProvider在方法中String Format string object 写完整的变体是否更好 String Format CultureInfo CurrentCulture String is
  • 如何在Android 10及更高版本中通过intent MediaStore.ACTION_IMAGE_CAPTURE获取图像URI

    对于版主 我知道已经存在这样的问题 但所有这些方法最终都会通过提供位图data getExtra data 这实际上只是thumbnail 我想要获取 URI 而不是位图 并且我需要获取实际图像的 URI 而不是其缩略图 方法可在2021
  • 在 Python 中运行 Bash 命令

    在我的本地计算机上 我运行一个包含此行的 python 脚本 bashCommand cwm rdf test rdf ntriples gt test nt os system bashCommand 这很好用 然后我在服务器上运行相同的
  • 检查范围是否包含 Scala 中的值的通用方法

    我想编写一个通用类来保存范围的端点 但通用版本会出现编译错误 value gt is not a member of type parameter A final case class MinMax A lt Comparable A mi
  • 如何在Mandlebrot张量流程序中显示图像。当前输出是

    导入模拟库 import tensorflow as tf import numpy as np 导入可视化 from PIL Image from io import BytesIO from IPython display import
  • 在python绑定/clang中的get-includes中解析cpp文件时过滤目录

    我应该编写一个 python clang 解析器 它返回 cpp 文件中的所有包含内容 所以我使用像下面的代码这样的东西 def main from clang cindex import Index from optparse impor