我有一个python脚本,它与某个网络池接口,以便从中读取数据 是连续320位。这个320位应该转发到某个C应用程序,这是持续的 从python脚本中读取这些320位并将它们放入int数组[8]。说实话,我不知道这是否可行,并且会感谢这个问题的出发点。
我试图将你的一些想法混淆不清,尝试通过stdin从python发送数据到C app:
TEST.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;
}
test.py:
def run(self):
while True:
payload = 'some data'
sys.stdout.write(payload)
time.sleep(5)
然后我用管道开始这整个事情:python test.py | TEST.EXE
不幸的是,在test.exe端没有收到数据,不应该在stdin上提供这个数据吗?
答案 0 :(得分:3)
有几种可能的方式。
您可以使用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)
N.B。如果您想多次发送数据,则不使用Popen.communicate()
。
或者,您可以使用socket。但你必须修改两个程序才能做到这一点。
编辑:J.F Sebatian关于在命令行使用管道的评论是非常正确的,我忘记了!但是上面提到的技术仍然很有用,因为它只需要记住一个命令,特别是如果你想在python和C程序之间进行双向通信(在这种情况下你必须将stdout=subprocess.PIPE
添加到{{} 1}}调用,然后你的python程序可以从subprocess.Popen
读取。
答案 1 :(得分:2)
已经提到:
新建议:
事实上,套接字和消息队列可能是更安全的方式。但它们可能也意味着更多代码更改。