Ich denke, ich habe die Grundlagen der Verwendung eines Entry
als stdin an den Unterprozess. Möglicherweise müssen Sie es für Ihre eigenen Bedürfnisse anpassen (z. B. Ausgabe an Text
Widget).
Dieses Beispiel ruft ein Testskript auf:
# test.py:
#!/usr/bin/env python
a = raw_input('Type something!: \n') #the '\n' flushes the prompt
print a
die lediglich eine Eingabe erfordert (von sys.stdin
) und druckt sie aus.
Der Aufruf und die Interaktion mit dem Programm über eine grafische Benutzeroberfläche erfolgt mit:
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()
Was auch immer Sie nun in Entry
e
(gefolgt von der Return
Schlüssel), wird dann über stdin an proc
.
Ich hoffe, das hilft.
Prüfen Sie auch este für Ideen über stdout von Unterprozessen Frage. Sie müssen ein neues stdout schreiben, um stdout an das Textwidget umzuleiten, etwa so:
class MyStdout(object):
def __init__(self,textwidget):
self.textwidget = textwidget
def write(self,txt):
self.textwidget.insert(END,txt)
sys.stdout = MyStdout(mytextwidget)
aber ich würde empfehlen, andere Beispiele zu lesen, in denen dies gelungen ist.