Think I've got the basics of using an Entry
as stdin to subprocess. You may have to jiggle it about for your own needs (re: output to Text
widget).
This example calls a test script:
# test.py:
#!/usr/bin/env python
a = raw_input('Type something!: \n') #the '\n' flushes the prompt
print a
that simply requires some input (from sys.stdin
) and prints it.
Calling this and interacting with it via a GUI is done with:
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()
Now whatever is typed into Entry
e
(followed by the Return
key), is then passed via stdin to proc
.
Hope this helps.
Also check this for ideas about stdout of subprocess question. You'll need to write a new stdout to redirect stdout to the textwidget, something like:
class MyStdout(object):
def __init__(self,textwidget):
self.textwidget = textwidget
def write(self,txt):
self.textwidget.insert(END,txt)
sys.stdout = MyStdout(mytextwidget)
but I would recommend reading other examples where people have achieved this.