Tkinterのウィジェットを介してstdinを使用subprocess.call()
または操作し、stdoutをウィジェットに出力する方法はありますか?subprocess.Popen()
Entry
Text
私はsubprocess
モジュールを使用するのが初めてなので、このようなものにアプローチする方法がよくわかりません。
Tkinterのウィジェットを介してstdinを使用subprocess.call()
または操作し、stdoutをウィジェットに出力する方法はありますか?subprocess.Popen()
Entry
Text
私はsubprocess
モジュールを使用するのが初めてなので、このようなものにアプローチする方法がよくわかりません。
Entry
as 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)
しかし、人々がこれを達成した他の例を読むことをお勧めします。