我有一个 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.PIPE
到 subprocess.Popen
调用,然后你的 python 程序可以从 p.stdout
读取。
关于python - 在 python 脚本和 C 应用程序之间持续通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072634/