2012-06-05 4 views
3

Text 위젯에 표준 출력을 subprocess.call() 또는 subprocess.Popen()를 사용하고는 Tkinter의 Entry 위젯을 통해 표준 입력 및 출력과 상호 작용하는 방법은 없나요?subprocess.call()

나는 subprocess 모듈을 처음 사용하기 때문에 이와 같은 것에 접근하는 방법을 잘 모르겠습니다.

+0

와우 하하, 처음으로 내 질문 중 하나가 하루도 코멘트없이 진행되었습니다. P –

+1

SO 및 다른 곳에서 답변이 많이 있습니다 (예 : http://stackoverflow.com/questions/665566/python-tkinter). -shell-to-gui)를 사용하여 stdout을 Tkinter 위젯으로 리디렉션합니다. 그러나 누군가가 알게되면 GUI 위젯에서 하위 프로세스로 stdin을 전달하는 방법을 알고 싶습니다. – Jdog

+0

네, STDIN을 작동시키는 방법을 알고 싶습니다. (awsome! xD가 될 것입니다.)하지만 링크를 위해 :) –

답변

1

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 키 다음) Entrye에 입력 된대로 이제

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) 

을하지만 난 사람들이 달성 한 다른 예를 읽고 추천 할 것입니다.

+0

'sys.stdout'을 파이썬 객체로 바꾸어도'subprocess' 'stdout에 영향을 미치지 않습니다. [[ 이 대답] (http://stackoverflow.com/a/22434262/4279). GUI 위젯에서 하위 프로세스 'stdout을 표시하려면 [이 응답] (http://stackoverflow.com/a/32682520/4279)을 참조하십시오. – jfs

관련 문제