2016-04-25 17 views
1

我有一個程序,有C/C#能力,我有Python。我希望該程序幾乎以毫秒爲單位更新文本文件,並讓python以毫秒爲單位讀取該文本文件。我該如何去做到這一點?可以通過兩個程序同時更新文本文件(實時通信)嗎?

是否有可能通過另一個程序更新文本文件並通過python直接閱讀?有沒有其他的方法來做到這一點,而不是依靠文本文件。 基本上我想要做的是一堆從該程序使用Python的實時數據的計算,並將這些計算以命令的形式發回給程序。可以不關閉並重新打開並在內存中更新的文件?

+2

我想你想要一個管道而不是文件。 –

+2

添加到什麼@ TadhgMcDonald-Jensen說,http://stackoverflow.com/questions/6977561/pipe-vs-temporary-file – RamblinRose

+1

我不認爲你可以實現「幾乎」的一部分 - 變化將立即可見。 ..(閱讀共享模式打開文件,如果你真的想用文本文件的方式 - 即http://stackoverflow.com/questions/222089/in-c-if-2-processes-are-reading-and-寫同一個文件什麼是最好的) –

回答

0

如果你開始從蟒蛇的C/C#程序與subprocess.Popen那麼你的兩個程序可以通過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對象,您可以使用.decode()方法轉換爲str

然後發送輸入到你可以簡單地寫入到標準輸入過程:

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用戶輸入)

+0

謝謝,但是,我發現這個http://zeromq.org,正是我期待的。 – auryndb

相關問題