3

Tkinterのウィジェットを介してstdinを使用subprocess.call()または操作し、stdoutをウィジェットに出力する方法はありますか?subprocess.Popen()EntryText

私はsubprocessモジュールを使用するのが初めてなので、このようなものにアプローチする方法がよくわかりません。

4

1 に答える 1

2

Entryas stdin をサブプロセスに使用する基本を理解していると思います。あなた自身のニーズに合わせてそれを揺さぶる必要があるかもしれません(re:Textウィジェットへの出力)。

この例では、テスト スクリプトを呼び出します。

# test.py:

#!/usr/bin/env python
a = raw_input('Type something!: \n') #the '\n' flushes the prompt
print a

sys.stdinこれは、( からの)入力を必要とし、それを出力するだけです。

これを呼び出して GUI 経由で操作するには、次のようにします。

from Tkinter import *
import subprocess

root = Tk() 

e = Entry(root)
e.grid()

b = Button(root,text='QUIT',command=root.quit)
b.grid()

def entryreturn(event):
    proc.stdin.write(e.get()+'\n') # the '\n' is important to flush stdin
    e.delete(0,END)

# when you press Return in Entry, use this as stdin 
# and remove it
e.bind("<Return>", entryreturn)

proc = subprocess.Popen('./test.py',stdin=subprocess.PIPE)

root.mainloop()

これで、入力されたものEntry e(その後にReturnキーが続く) は、stdin を介して に渡されprocます。

お役に立てれば。


また、サブプロセスの質問の標準出力に関するアイデアについては、これを確認してください。stdout を textwidget にリダイレクトするには、次のような新しい stdout を作成する必要があります。

class MyStdout(object):
    def __init__(self,textwidget):
        self.textwidget = textwidget
    def write(self,txt):
        self.textwidget.insert(END,txt)

sys.stdout = MyStdout(mytextwidget)

しかし、人々がこれを達成した他の例を読むことをお勧めします。

于 2012-06-05T15:59:14.510 に答える