簡體   English   中英

文本文件可以同時由兩個程序更新(實時通信)嗎?

[英]Can a text file be updated by two programs simultaneously (live communication)?

我有一個具有c / c#能力的程序,我有python。 我希望該程序幾乎以毫秒為單位更新文本文件,並讓python以毫秒為單位讀取該文本文件。 我怎樣才能實現這一目標?

是否可以通過另一個程序實時更新文本文件並通過python實時閱讀? 有沒有其他方法可以做到這一點,而不是依賴於文本文件。 基本上我想做的是使用python對來自該程序的實時數據進行大量計算,並以命令的形式將這些計算發送回程序。可以在內存中關閉並重新打開並更新文件嗎?

如果你使用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()

請注意,這兩種方法都是阻塞方法,盡管存在非阻塞方案

另請注意,在python 3中這些將返回bytes對象,您可以使用.decode()方法轉換為str

然后將輸入發送到進程,您只需寫入stdin:

c_program.stdin.write(DATA)

與上面的read一樣,在python 3中,此方法需要一個bytes對象。 在將其寫入管道之前,您可以使用str.encode方法對其進行編碼。


我對C#的知識非常有限,但是從有限的研究來看,你似乎可以System.Console.In讀取數據並將數據寫入System.Console.Out ,盡管如果你在C#中編寫了在終端中運行的程序,那么用於將數據寫入屏幕並從用戶讀取輸入的方法也適用於此處。 (你可以想象.stdout作為終端屏幕和數據python寫入.stdin用戶輸入)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM