多くの多くの方法があります。私の頭に浮かぶ最初のものは名前付きパイプ(別名FIFO)です。ここではPythonのコードは、(私はあなたのシェバングはpython2のためであっても起因するあなたのTkinterのインポートにのpython3を仮定している)だ:
#!/usr/bin/env python3
import tkinter as tk
import os
import stat
from threading import Thread
class FIFO(Thread):
def __init__(self, pipename, func):
self.pipename = pipename
if pipename in os.listdir('.'):
if not stat.S_ISFIFO(os.stat(self.pipename).st_mode):
raise ValueError("file exists but is not a pipe")
else:
os.mkfifo(pipename)
Thread.__init__(self)
self.func = func
self.daemon = True
self.start()
def run(self):
while True:
with open(self.pipename) as f: # blocks
self.func(f.read())
def close(self):
os.remove(self.pipename)
root = tk.Tk()
var = tk.StringVar(value='Libre')
# pipes the content of the named pipe "signal" to the function "var.set"
pipe = FIFO("signal", var.set)
l = tk.Label(root, textvariable=var)
l.pack(fill=tk.BOTH, expand=True)
root.geometry("200x100")
root.mainloop()
pipe.close()
この例では、「信号」という名前のパイプを作成しますので、そのパイプにあなたが書いたものが設定されます変数の中に入れます。たとえば、あなたは同じフォルダに新しいターミナルを開き、入力した場合
echo I am a cucumber > signal
その後、「私はキュウリだ」とTkinterのウィンドウの変更でラベル。
他のプログラムやプログラミング言語からもアクセスできます。たとえば、あなたは別のPythonプログラムからデータを送信する場合:
with open('signal', 'w') as f:
f.write('I am a banana')
名前付きパイプは多くのプログラムがそれらに書き込むことができるように設計されていますが、1つのプログラムだけがデータを読み出す必要があります。
"プロセス間通信"をグーグルにすると、プログラム間で多くの通信方法が見つかるでしょう。ソケットやdbusがおそらく最も一般的です。 – Novel