【问题标题】:How can I connect the output of a C program to a python program at runtime [closed]如何在运行时将 C 程序的输出连接到 python 程序[关闭]
【发布时间】:2019-09-14 20:00:49
【问题描述】:

我有一个 C 程序正在生成实时数据,我正在尝试将数据通过管道传输到 python 程序,以便我可以处理它并在运行时绘制它。

我可以将 C 程序的输出保存到文件中,然后将其读入 python,但我想在运行时执行。有人可以告诉我怎么做。

【问题讨论】:

  • 在类 Unix 系统上,您可以简单地连接 C 程序的标准输出和 Python 程序的标准输入。另一种方法是使用套接字或命名管道。
  • @ArkadiuszDrabczyk 好吧,我已经尝试过这样做,这就是我想要做的,但没有奏效。我提到了这篇文章'raspberrypi.stackexchange.com/questions/61197/…',但它没有用。可以举个例子吗?

标签: python c python-3.x matplotlib


【解决方案1】:

这是最简单的方法之一:

  1. 让您的 C 程序在stdout 上打印其输出。这是printf() 使用的标准流。
  2. 让您的 python 程序从stdin 读取其输入。这是input() 使用的标准流。
  3. 在命令行上用管道符号| 连接两个程序,如下所示:

    c-program | python script.py
    

请注意,还有更多方法可以使两个程序进行通信。还有更多的方法可以写入stdout 和读取stdin

所描述的方法适用于所有主要操作系统。

它的最大优势之一是您可以独立开发每个部分并单独对其进行测试。例如,您可以将 C 程序的输出通过管道传输到文件中以供稍后检查。同样,您可以将此文件或任何其他文件的输入通过管道传输到 python 脚本中。

【讨论】:

  • 我已经尝试过了,但没有成功。我的 C 程序正在运行一个循环,将数据连续打印到标准输出。 ./rf_receiver | read_rf.py read_rf.py >>>while True: >>> read = input() >>> print(read)
  • 好的,怎么没用?
  • 抱歉,由于某种原因,代码缩进不起作用。
  • 我们无法在 cmets 中格式化代码。评论就是这样,cmets。 ;-)
  • 嘿,现在这听起来很奇怪,但它现在可以工作了。 :|但感谢您的帮助。最初它在读取的第一个输入时给我一个错误,但现在它可以完美地工作。
【解决方案2】:

最好的方法是使用fileinput 模块,如下所示:

import fileinput

for line in fileinput.input():
    print(line.rstrip())

此循环将处理来自stdin 的每一行输入。

然后你可以运行类似的东西

cat data.csv | python r.py

【讨论】:

  • 我想在运行时进行,所以使用文件不会有帮助。
  • 您阅读文档了吗? This module implements a helper class and functions to quickly write a loop over standard input。 cat 命令只是关于如何生成内容以发送到另一个进程(python 进程)到标准输入的一个示例
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 2015-03-15
相关资源
最近更新 更多