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

Pat*_*ick 2 c python

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

我试图不合作你的一些想法,试图通过标准输入将数据从 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;
}
Run Code Online (Sandbox Code Playgroud)

测试.py:

def run(self):

    while True:           
        payload = 'some data'
        sys.stdout.write(payload)
        time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

然后我使用管道开始这整个事情: python test.py | 测试程序

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

Rol*_*ith 6

有几种可能的方法。

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

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