는 Text
위젯에 표준 출력을 subprocess.call()
또는 subprocess.Popen()
를 사용하고는 Tkinter의 Entry
위젯을 통해 표준 입력 및 출력과 상호 작용하는 방법은 없나요?subprocess.call()
나는 subprocess
모듈을 처음 사용하기 때문에 이와 같은 것에 접근하는 방법을 잘 모르겠습니다.
는 Text
위젯에 표준 출력을 subprocess.call()
또는 subprocess.Popen()
를 사용하고는 Tkinter의 Entry
위젯을 통해 표준 입력 및 출력과 상호 작용하는 방법은 없나요?subprocess.call()
나는 subprocess
모듈을 처음 사용하기 때문에 이와 같은 것에 접근하는 방법을 잘 모르겠습니다.
Entry
을 하위 프로세스로 사용하는 기본 사항이 있다고 생각하십시오. 자신의 필요에 따라 흔들림이 생길 수 있습니다 (다시 : Text
위젯으로 출력). 단순히 (sys.stdin
에서) 약간의 입력을 요구하고 인쇄
# test.py:
#!/usr/bin/env python
a = raw_input('Type something!: \n') #the '\n' flushes the prompt
print a
:
이 예는 테스트 스크립트를 호출합니다. 다음 proc
에 표준 입력을 통해 전달되고합니다 (Return
키 다음) Entry
e
에 입력 된대로 이제
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()
:
이 호출하고 GUI를 통해 상호 작용
이 이루어집니다.희망이 도움이됩니다.
또한 서브 프로세스 질문의 표준 출력에 대한 아이디어를 this을 확인합니다. 당신은 textwidget에 같은 표준 출력을 리디렉션하는 새로운 표준 출력을 작성해야 :
class MyStdout(object):
def __init__(self,textwidget):
self.textwidget = textwidget
def write(self,txt):
self.textwidget.insert(END,txt)
sys.stdout = MyStdout(mytextwidget)
을하지만 난 사람들이 달성 한 다른 예를 읽고 추천 할 것입니다.
'sys.stdout'을 파이썬 객체로 바꾸어도'subprocess' 'stdout에 영향을 미치지 않습니다. [[ 이 대답] (http://stackoverflow.com/a/22434262/4279). GUI 위젯에서 하위 프로세스 'stdout을 표시하려면 [이 응답] (http://stackoverflow.com/a/32682520/4279)을 참조하십시오. – jfs
와우 하하, 처음으로 내 질문 중 하나가 하루도 코멘트없이 진행되었습니다. P –
SO 및 다른 곳에서 답변이 많이 있습니다 (예 : http://stackoverflow.com/questions/665566/python-tkinter). -shell-to-gui)를 사용하여 stdout을 Tkinter 위젯으로 리디렉션합니다. 그러나 누군가가 알게되면 GUI 위젯에서 하위 프로세스로 stdin을 전달하는 방법을 알고 싶습니다. – Jdog
네, STDIN을 작동시키는 방법을 알고 싶습니다. (awsome! xD가 될 것입니다.)하지만 링크를 위해 :) –