python - 在 python 脚本和 C 应用程序之间持续通信

标签 python c

我有一个 python 脚本,它与一些网络池接口(interface)以从中读取数据, 连续 320 位。这 320 位应该转发给某个 C 应用程序,它不断 从 python 脚本中读取这 320 位并将它们放入一个 int 数组 [8] 中。老实说,我完全不知道这是否可行,感谢您为这个问题提供一个起点。

我尝试结合你的一些想法,尝试通过 stdin 从 python 向 C 应用程序发送数据:

测试.exe:

#include <stdio.h>
int main(void)
{
    int ch;
    /* read character by character from stdin */
    do {
    ch = fgetc(stdin);
    putchar(ch);
    } while (ch != EOF);


    return 0;
}

测试.py:

def run(self):

    while True:           
        payload = 'some data'
        sys.stdout.write(payload)
        time.sleep(5)

然后我使用管道启动整个过程:python test.py |测试.exe

不幸的是,在 test.exe 端没有收到数据,这个数据不应该在 stdin 上可用吗?

最佳答案

有几种可能的方法。

您可以使用 subprocess 从 python 程序启动 C 程序模块。在那种情况下,您可以从 python 程序写入到 C 程序的标准输入。这可能是最简单的方法。

import subprocess

network_data = 'data from the network goes here'
p = subprocess.Popen(['the_C_program', 'optional', 'arguments'], 
                     stdin=subprocess.PIPE)
p.stdin.write(network_data)

注意如果你想多次发送数据,那么你应该使用Popen.communicate()

或者,您可以使用 socket .但是您必须修改这两个程序才能做到这一点。

编辑:J.F Sebatian 关于在命令行上使用管道的评论非常正确,我忘记了!但是上面提到的技术仍然有用,因为它是一个不需要记住的命令,特别是如果你想在 python 和 C 程序之间进行双向通信(在这种情况下你必须添加 stdout=subprocess.PIPEsubprocess.Popen 调用,然后你的 python 程序可以从 p.stdout 读取。

关于python - 在 python 脚本和 C 应用程序之间持续通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072634/

相关文章:

c - 删除链表最后一项

c - 如何使用命令中的参数运行 execlp

c++ - 嵌入式系统中固有、内联、外部的区别?

python - 在函数中编辑列表是如何工作的

python - 忽略后续逗号的最佳方法

c - C 中的复合语句是左值(或右值)吗?

c - 使用 C 解析 MIDI 文件 -(分配内存时可能出现问题)

python - 检查另一个数据框中是否存在多行

python - 通过python优化mysql插入查询

python - 使用 beautifulsoup 将标签插入到 html 中,并且值已经存在