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

时间:2016-04-25 22:47:19

标签: c# python c io ipc

我有一个具有c / c#能力的程序,我有python。我希望该程序几乎以毫秒为单位更新文本文件,并让python以毫秒为单位读取该文本文件。我怎样才能实现这个目标?

是否可以通过其他程序更新文本文件并通过python实时阅读?有没有其他方法可以做到这一点,而不是依赖于文本文件。 基本上我想要做的是使用python对来自该程序的实时数据进行一系列计算,并以命令的形式将这些计算发送回程序。可以在内存中关闭并重新打开并更新文件吗?

1 个答案:

答案 0 :(得分:0)

如果你使用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,但这两种方法都是阻止方法。

另请注意,在python 3中,这些对象将返回bytes个对象,您可以使用str方法转换为.decode()

然后,要将输入发送到流程,您只需写入stdin:

c_program.stdin.write(DATA)

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

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