소프트웨어를 개발 중이며 패키지 관리자와 같이 터미널에서 발생하는 출력을 표시하는 창이 필요합니다. 예를 들어, 내가 설치 명령을 내리는 경우, 설치 프로세스는 터미널이 아닌 내 창으로 부 터 outptutted되어야합니다. 파이썬 Gtk에서이 작업을 수행 할 수있는 방법이 있습니까?파이썬 Gtk를 사용하여 GUI 창에 터미널 출력 표시
4
A
답변
9
,이 같은 작업을해야합니다 :
import gtk
import gobject
import pango
import os
from subprocess import Popen, PIPE
import fcntl
wnd = gtk.Window()
wnd.set_default_size(400, 400)
wnd.connect("destroy", gtk.main_quit)
textview = gtk.TextView()
fontdesc = pango.FontDescription("monospace")
textview.modify_font(fontdesc)
scroll = gtk.ScrolledWindow()
scroll.add(textview)
exp = gtk.Expander("Details")
exp.add(scroll)
wnd.add(exp)
wnd.show_all()
sub_proc = Popen("ping -c 10 localhost", stdout=PIPE, shell=True)
sub_outp = ""
def non_block_read(output):
fd = output.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
try:
return output.read()
except:
return ''
def update_terminal():
textview.get_buffer().insert_at_cursor(non_block_read(sub_proc.stdout))
return sub_proc.poll() is None
gobject.timeout_add(100, update_terminal)
gtk.main()
블로킹이 아이디어는 here에서 읽기. 텍스트를 표시하는 라벨을 사용하여
:
import gtk
import gobject
import os
from subprocess import Popen, PIPE
import fcntl
wnd = gtk.Window()
wnd.set_default_size(400, 400)
wnd.connect("destroy", gtk.main_quit)
label = gtk.Label()
label.set_alignment(0, 0)
wnd.add(label)
wnd.show_all()
sub_proc = Popen("ping -c 10 localhost", stdout=PIPE, shell=True)
sub_outp = ""
def non_block_read(output):
''' even in a thread, a normal read with block until the buffer is full '''
fd = output.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
try:
return output.read()
except:
return ''
def update_terminal():
label.set_text(label.get_text() + non_block_read(sub_proc.stdout))
return sub_proc.poll() is None
gobject.timeout_add(100, update_terminal)
gtk.main()
0
서브 프로세스 모듈과 os 모듈을 사용하여 터미널 출력을 가져올 수 있습니다.이 경우 question을 확인할 수 있습니다.
(당신이 상태로) 리눅스에있는 경우관련 문제
- 1. Tkinter 터미널 출력 표시
- 2. 파이썬 유니 코드 터미널 출력
- 3. 파이썬의 터미널 창에 인쇄하십시오.
- 4. PyQT4를 사용하여 창에 텍스트 표시
- 5. 파이썬 하위 프로세스에서 터미널 출력 복사하기
- 6. GUI 창에서 터미널 질문에 응답하기
- 7. tkinter에 터미널 인쇄 GUI 레이블
- 8. Turbo C의 메시지 창에 출력 표시
- 9. 표준 출력 GUI GUI
- 10. SPSS 출력 창에 출력 인쇄
- 11. 터미널 맨 처음에 출력 출력
- 12. 영구 터미널 출력
- 13. 유니 코드 문자가 터미널 창에 인쇄되지 않았습니다.
- 14. 파이썬 OpenCV를 사용하여 동일한 창에 여러 이미지 표시?
- 15. C++ 창에 텍스트 출력
- 16. 파이썬 형식의 출력 파일
- 17. GUI 디버거와 터미널 디버거의 차이점
- 18. GUI/터미널 이맥스 전용 설정
- 19. Execve에서 터미널 출력 숨기기
- 20. Rspec 터미널 출력 구성
- 21. 루비에서 curses없이 터미널 출력?
- 22. Java 잡기 터미널 출력
- 23. Git 터미널 출력
- 24. LLDB 터미널 출력
- 25. JTextField JButton을 사용하여 새 창에 출력
- 26. 파이썬 - Tkinter 라벨 출력?
- 27. Python에서 MATLAB 스타일 터미널 출력
- 28. 자바 GUI 창에 출력이 없습니다
- 29. GUI, 창에 버튼이 표시되지 않음
- 30. 잘못된 gui 창에 플롯이 생성되었습니다.
가 정확하려면, 우분투 13.04에서 작동합니다. –
http://pygabriel.wordpress.com/2009/07/27/redirecting-the-stdout-on-a-gtk-textview/ –