我在C代码中接收数据,目前我唯一能做的就是在屏幕上打印数据。我想知道,如果有可能不是仅仅在屏幕上打印数据,是否可以将数据发送到能够进一步处理数据的正在运行的Python代码?数据采用数组形式。将在屏幕上打印数据的设备将运行Python代码。
我这样做是为了避免将数据保存在文件中,然后从我的python脚本访问该文件,这将增加我的时间相关系统的延迟。
C代码在低处理设备上运行,该设备只能接收数据而无需任何处理。
(编辑)我的意思的证明包括在内:
C方:
// code that receives the data periodically as an array
// when received do
printf(" x = %d y = %d z = %d ", data[0],data[1],data[2]);
// what I am looking for is something like this
sendtoPy("filename.py",data)
// repeat
Python方面:
# this code just sits to wait for anything coming from C
# wait for any code to be received from datafromCexample.c
def waitforC("datafromCexample.c",data):
print "data has been received"
# process the data received into a list
# further processing
waitforC(data)
当然这只是演示的原始代码。如果我在演示中犯了错误,请教我并纠正我,我只是想学习。如果没有,您能否包括可以在这种情况下使用的替代品?
谢谢。
答案 0 :(得分:2)
如果C程序和Python程序/脚本可以在同一设备上运行,那么您有几个选择:
subprocess.check_output
,处理生成的输出。根据操作系统的不同,您可以使用命名管道,套接字,总线消息等等来获得更好的功能,但上面的选项可能已经足够可供选择,并且应该足以满足大多数用例。选择哪一个取决于您的数据的性质以及它的所需处理,以及一些非功能性要求(例如,如果其中一个过程停止,那么......)因此无法回答
在对此答案的评论中,you inquire
我希望选择第一个选项[...]。如果你能推荐一个可以很好地使用数组的库或程序,我将不胜感激。
对于C方面,我将需要通过它的库,我将数据传递给python代码。在Python方面,我想我将需要使用多线程,这将允许我永远运行(预测任何传入的数据)2接收来自C代码的传入数据,因此一个库将能够这样做
管道的美妙之处在于,所涉及的流程在大多数编程语言中都不需要任何特殊的库。这些过程只是做了几乎所有通用编程语言允许的(或多或少)简单方法:从标准输入读取和/或写入标准输出。这也是命令行应用程序在读取您在键盘上键入的内容和/或将文本打印到(今天经常是虚拟的)终端(例如文本控制台)时所做的事情。
将一个进程的输出转发到另一个进程的输入(就像用户正在读取第一个进程打印的内容并将其输入到第二个进程中)是操作系统的任务,因此进程不必是关心这一点。第一个过程只需要输出第二个过程可以理解的格式。
例如,unix命令ls
将列出当前工作目录中的文件和目录。让我们假设它每行打印一个名字。 unix命令shuf
从标准输入读取行,直到它检测到其中的文件结束符,然后以随机顺序打印它们。 (它洗了他们。)
您可以在shell中调用shuf
(例如sh
或bash
)并输入Hello World!
[输入] I like shuffled text.
[输入] {{1 } [Enter] Do you, too?
[Enter] [Ctrl + d],可能会得到如下输出:
No? What a pity.
如果要列出当前工作目录中的文件和目录,但使用的顺序与Do you, too?
Hello World!
No? What a pity.
I like shuffled text.
返回的顺序不同,则可以将ls
的输出通过ls
。 。例如。在shuf
或sh
:
bash
将获取ls | shuf
的输出并将其转发到ls
,如果它是手动输入的话。 (只比你输入的快得多。)
因此,如果您的C程序在终端上产生机器可解析的输出(可能已经是这种情况;您可能希望在您的问题中包含其当前终端输出的示例。),您可以将其转发到您的python有类似
的程序shuf
然后你的python程序只需要read from standard input并处理你想要它的内容。读取标准输入的大多数直接方法将遍历所有接收到的行,直到文件结束发生或者它们收到终止进程的信号,因此保持python脚本永久运行不应该太难。 (除非您还关心在意外终止时自动重启,例如由于运行时错误。)
答案 1 :(得分:1)
您可以考虑从python代码调用C函数,请阅读此示例https://csl.name/post/c-functions-python/
答案 2 :(得分:1)