別のスクリプトの出力をTkinterウィンドウにルーティングしようとしています。os.pipe()からTkinterテキストボックスに直接読み込む
以下は私の問題の解決方法です。 Tkinterボックスは表示されますが、ここで抽象化されたコントローラがos.write(pipeout、msg)を使用してpipeoutに書き込むと更新されません。
from Tkinter import *
from controller import controller
import os
def run():
"""Top level run method which initiates program."""
def updateInput():
"""Update the textbox with controller output."""
readFrom = os.fdopen(pipein)
line = readFrom.readline()
text.insert(END, line)
text.after(1000, updateInput)
pipein, pipeout = os.pipe() #pipe for comms between tkinter and controller
pid = os.fork()
if not pid:
#within child process, launch controller with passed pipe
os.close(pipein)
mainController = controller(pipeout)
os.close(pipeout)
root = Tk()
text = Text(root)
text.pack()
text.after(1000, updateInput) #update text box each second
root.mainloop()
if __name__ == "__main__":
run()
抽象化コントローラは、self.pipeout
は、コントローラクラスINITにself.pipeout = pipeout
から割り当てられた
os.write(self.pipeout, msg)
を介してパイプに書き込んでいます。
'updateInput'を実行するとどうなりますか?それはクラッシュしますか?それは間違ったことを読んでいますか? OKを読みますが、テキストを挿入できませんか?問題はどこから始まるのですか?実際に何かを書いているようには見えません。 –
パイプからの読み取りがないようです。私はos.write(self.pipeout、msg)ステートメントを使用して、もう一方の端でself.pipeoutが割り当てられたself.pipeout = pipeoutのパイプに書き込んでいます。私は質問を更新します。 @BryanOakley – wirrell
「読み込みがありません」という意味は何ですか?期待通りに 'updateInput'が呼び出されていますか?あなたはそれが呼び出されていると言っていますが、何とか 'read'の呼び出しをスキップしていますか? –