python - 从 python 运行 C 代码并监听变量值

标签 python c wrapper

我有一个 C 代码(传感器的 SDK),当我运行它时,它会通过 USB 启动与传感器的连接,然后通过回调监听传感器输出并打印它(我也在文本文件上写入)。此回调中每 50 毫秒打印一个样本。

现在我想从Python运行这个C代码(因为我需要在Python中实时分析数据),每当C中的回调函数生成新的输出(一个16*1的整数数组)时,我需要将它们传递给 python 代码。

我见过一些运行 C 代码的方法,例如 Swig,但我认为这些方法是在调用 C 代码并获取它们的返回值时使用的。 但就我而言,C 代码处于无限循环中,并且主代码中不返回任何内容。我也没有这个选项可以从传感器中一一读取样本,因为每次运行 C 代码时,我都应该通过 USB 连接到传感器,然后能够读取值,连接到传感器需要时间,我不能这样做一直以来。

这是我用来连接传感器并读取值的 SDK(C 代码)。 https://www.dropbox.com/s/s5rrrdy4mzrv54f/Main.c?dl=0

我不是软件工程师,所以我可能不擅长提前编码。 谁能帮我解决这个问题吗?

谢谢。

最佳答案

您可以使用 ctypes 或其他绑定(bind)代码对 Python 进行“回调”,但这意味着您的 Python 代码将“妨碍”您的 C 代码 - 每当您运行 Python 代码时,您都不会检查来自的值传感器。

有时,越简单越好:您可以将值写入文件,然后可以从单独的 Python 进程中延迟读取该文件。

如果您不想让文件增长,您可以使用命名管道(如果您使用的是 Unix)。或者也许只是使用 redis 将值放入队列中。

否则,只需将相关的 PythonAPI 代码添加到您的 C 程序中,以便您可以使用 Python multiprocessing.Queue 对象并将您的值放在那里,然后使用 multiprocessing 启动进程来运行您的 C 代码。

https://docs.python.org/3/library/multiprocessing.html#pipes-and-queues

这需要编写 C 代码,以便可以从 Python 调用它,并获取队列作为参数。然后,您的 C 代码可以继续池化传感器,而 Python 端则使用这些值。

(TL;DR: 检查你的 C 示例,看起来你在 Linux 上。所以我的第一个建议对你来说只是最简单的事情 - 使用 NamedPipe 和单独的 Python 程序来处理值。在 C 方面,您不需要做任何事情 - 只需创建命名管道,将记录读取数据的文件发送到 http://www.tldp.org/LDP/lpg/node15.html )

关于python - 从 python 运行 C 代码并监听变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240087/

相关文章:

php - 不同的包装背景图像 wordpress 自定义模板

c# - 需要在 c# 中制作 .lib、.h 和 .dll 的包装器

python - 如何在 Ubuntu 上安装 PyOpenCV

c - Typedef 函数,它有用吗?

c - 如何将具有两个无符号短裤的结构视为无符号整数? (在 C 中)

python - 在 Python 中使用 Datumbox 进行情感分析

python - connection.commit() 和cursor.execute ('commit' 之间有什么区别?

python - 运行 .py 文件直到指定的行号

python - 如何在列表中找到相同的值并将新列表组合在一起?

c - 分割失败?为什么?