两个程序可以同时更新一个文本文件(实时通信)吗?
Posted
技术标签:
【中文标题】两个程序可以同时更新一个文本文件(实时通信)吗?【英文标题】:Can a text file be updated by two programs simultaneously (live communication)? 【发布时间】:2016-04-25 22:47:18 【问题描述】:我有一个具有 c/c# 能力的程序,并且我有 python。我希望该程序几乎在几毫秒内更新一个文本文件,并让 python 在几毫秒内读取该文本文件。我怎样才能做到这一点?
文本文件是否可以由另一个程序实时更新并由 python 实时读取?有没有其他方法可以做到这一点,而不是依赖文本文件。 基本上我想要做的是使用 python 对该程序的实时数据进行一堆计算,然后以命令的形式将这些计算发送回程序。文件不能关闭并重新打开并在内存中更新吗?
【问题讨论】:
我认为你想要的是管道而不是文件。 补充@TadhgMcDonald-Jensen 所说的,***.com/questions/6977561/pipe-vs-temporary-file 我认为您无法实现“几乎”部分-更改将立即可见...(如果您真的想使用文本文件方法,请阅读打开文件的共享模式-即***.com/questions/222089/…) 我知道,如果 C 部分是通过subprocess.Popen
从 python 运行的,只需指定 stdout=subprocess.PIPE
(stdin
和 stderr
相同),然后你就可以建立管道可以.communicate
用它。
值得回答吗?我不知道从 C# 端如何进行通信......好吧,就像你写入标准输出 / 从标准输入读取一样......
【参考方案1】:
如果您使用 subprocess.Popen
从 python 启动 C/C# 进程,那么您的两个程序可以通过 stdin
和 stdout
管道进行通信:
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
对象,您可以使用 .decode()
方法将其转换为 str
。
然后要将输入发送到进程,您可以简单地写入标准输入:
c_program.stdin.write(DATA)
与上面的 read
一样,在 python 3 中,此方法需要一个 bytes
对象。您可以使用str.encode
方法对其进行编码,然后再将其写入管道。
我对 C# 的了解非常有限,但从有限的研究来看,您似乎可以使用 read data from System.Console.In
和 write data to System.Console.Out
,尽管如果您使用 C# 编写了在终端中运行的程序,则使用相同的方法将数据写入screen 和读取用户的输入也可以在这里工作。 (你可以把.stdout
想象成终端屏幕和数据python写入.stdin
用户输入)
【讨论】:
以上是关于两个程序可以同时更新一个文本文件(实时通信)吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以同时运行两个 apk 并使它们通过 Windows 服务进行通信?