与C语言的操作系统独立的Python跨程序通信
我对自己在做什么几乎没有概念,我以前从来没有做过这样的事情,不过我和一个朋友正在写两个竞争的国际象棋程序,它们需要能够互相交流。
他主要用C语言写,而我大部分会用Python。我想到了一些选项:
- 交替写入一个临时文件,或者连续写入多个临时文件。因为通信的数据量不大,这种方法可能可行,但我觉得这是一种很笨的方法,程序需要不断检查文件是否有变化或新文件,这样看起来很麻烦。
- 找一种方法来操作管道,比如 mine.py| ./his。这似乎有点无路可走。
- 使用套接字。不过我不知道该怎么做,能不能给我一些阅读材料的建议?我不确定有没有操作系统和语言都无关的方法。是不是需要一个监督的服务器程序来管理?
- 使用某种HTML协议,这似乎有点过于复杂。我不介意程序在同一台机器上运行。
大家有什么推荐的,或者我可以从哪里开始阅读?
6 个回答
2
你可以使用 Protobuf 作为程序之间的通信协议,每次运行时从文件中读取和写入数据。
你可以每隔 n 秒读取一次这个中间文件。
一旦这个功能正常工作,你可以改用套接字(sockets),这样每个程序就可以启动一个服务器,等待连接。
这个改动应该很小,因为你用的协议已经是 protobuf 了。所以,你只需要修改读取数据的地方,看看是从套接字读取还是从文件读取。
无论哪种情况,你都需要一个交换协议。
编辑
哦,我看错了,我以为是在说 C++。
不过,这里有 protobuf 的 C 语言支持,但仍在开发中。
3
有两种可能的方法:
使用IP套接字。Python文档里有一些例子。其实用基本的读写功能来操作并不难。不过,C语言里的套接字一般来说就没那么简单了。
创建一个第三个应用程序。这个程序可以同时启动两个应用,并通过管道与它们进行通信。棋类应用只能读取和写入标准输入和输出。
这样做还有一个额外的好处,就是这个应用可以检查棋步是否合法。这能帮助你找到错误,确保游戏的公平性。
7
如果你想要一种既不依赖操作系统,也不依赖编程语言的进程间通信方式,使用套接字(sockets)可能是最好的选择。
这样,两台机器上的程序也可以互相交流,而且不需要修改代码。
如果你想了解更多,可以看看这个Python套接字编程指南。