两个程序能否同时更新文本文件(实时通信)?

2024-04-25 00:04:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有c/c能力的程序,我有python。我想让程序更新一个文本文件,几乎以毫秒为单位,让python也以毫秒为单位读取该文本文件。我怎样才能做到这一点?你知道吗

文本文件是否可以由另一个程序实时更新,并由python实时读取?有没有其他方法可以代替依赖文本文件来实现这一点。 基本上,我想做的是使用python对来自该程序的实时数据进行一系列计算,并将这些计算以命令。可以一个文件不能被关闭和重新打开,还没有在内存中更新吗?你知道吗


Tags: 文件数据方法内存命令程序单位能力
1条回答
网友
1楼 · 发布于 2024-04-25 00:04:27

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

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
                             )

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

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:

c_program.stdin.write(DATA)

与上面的read一样,在python3中,这个方法需要一个bytes对象。在将其写入管道之前,可以使用str.encode方法对其进行编码。你知道吗


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

相关问题 更多 >