首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个文本文件可以由两个程序同时更新(实时通信)吗?

一个文本文件可以由两个程序同时更新(实时通信)吗?
EN

Stack Overflow用户
提问于 2016-04-26 06:47:19
回答 1查看 188关注 0票数 1

我有一个具有c/c#能力的程序,我还有python。我希望这个程序更新一个文本文件,几乎在毫秒内,并让python在毫秒内读取该文本文件。我怎样才能做到这一点呢?

一个文本文件可以被另一个程序实时更新,也可以被python实时读取吗?有没有替代文本文件的替代方法呢?基本上,我想做的是使用python对来自该程序的实时数据进行一系列计算,并以commands.Can的形式将这些计算发送回程序,该文件不会关闭并重新打开,但仍在内存中更新?

EN

回答 1

Stack Overflow用户

发布于 2016-04-26 07:51:46

如果您使用subprocess.Popen从python启动C/C#进程,那么您的两个程序可以通过stdinstdout管道进行通信:

代码语言:javascript
复制
c_program = subprocess.Popen(["ARGS","HERE"],
                             stdin = subprocess.PIPE,  # PIPE is actually just -1
                             stdout= subprocess.PIPE,  # it indicates to create a new pipe
                             stderr= subprocess.PIPE  #not necessary but useful
                             )

然后,您可以使用以下命令读取该进程的输出:

代码语言:javascript
复制
data = c_program.stdout.read(n) #read n bytes
#or read until newine
line = c_program.stdout.readline()

请注意,尽管存在non blocking alternatives,但这两种方法都是阻塞方法。

还要注意,在Python3中,这些函数将返回bytes对象,您可以使用.decode()方法将其转换为str

然后,要将输入发送到进程,您可以简单地写入stdin:

代码语言:javascript
复制
c_program.stdin.write(DATA)

与上面的read类似,在Python3中,此方法需要一个bytes对象。在将其写入管道之前,可以使用str.encode方法对其进行编码。

我对C#的了解非常有限,但从有限的研究来看,你似乎可以使用read data from System.Console.Inwrite data to System.Console.Out,尽管如果你用C#编写了在终端上运行的程序,用于将数据写入屏幕和读取用户输入的相同方法也可以在这里工作。(您可以将.stdout想象为终端屏幕,并将数据python写入.stdin作为用户输入)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36852429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档