2013-03-26 4 views
0

에코 얻을 나던 입력받을 때 내가 화면에 인쇄하는 방법 :삭제 나는 다음과 같은 코드를 발견

import threading 
from time import sleep 
import os 
class test: 
    def __init__(self): 
     self.running = True 
    def foo(self): 
     while(self.running): 
      os.system([ 'clear', 'cls' ][ os.name == 'nt' ]) 
      sleep(2) 
    def getUserInput(self): 
     x = '' 
     while(x != 'e'): 
      x = raw_input('Enter value: ') 
     self.running = False 
    def go(self): 
     th1 = threading.Thread(target=self.foo) 
     th2 = threading.Thread(target=self.getUserInput) 
     th1.start() 
     th2.start() 
t = test() 
t.go() 

를하지만 매번 그것이 내가 입력 한 내용을 포함하여 모든 것을 지우고 화면을 지 웁니다. 화면을 지울 수있는 것이 필요하지만 입력 할 수 있으며 입력 한 내용이 화면을 지울 때 지워지지 않습니다. 2 초마다 화면을 지우고 언제든지 입력을 받아 들일 수있는 화면이 필요합니다.

+0

입력 한 후에 화면을 지우십시오 ... 나는 자신의 스레드에 클리어 스크린을 갖고 싶다고 생각하지 않습니다 ... –

답변

0

cls와 같은 도구는 raw_input()이 다른 곳에서 발생하는 것을 인식하지 못하기 때문에 사용할 수없는 접근 방식이므로 화면 내용 중 일부를 보존 할 수 없습니다. 당신이 필요로하는 것은 그것을 조정하는 것입니다. 두 가지 가능한 접근 방식을 볼 수 있습니다.

  • 입력을 기다리는 동안 화면을 지우지 마십시오. 즉, 사용자가 입력을 요청하는 동안 대기하기 위해 정리 스레드에 신호를 보냅니다.
  • 저수준 라이브러리를 사용하여 화면 버퍼에 액세스하면 프롬프트를 유지할 수 있습니다. 제 생각에는 파이썬에는 "curses"구현이있어서 그렇게 할 수 있어야합니다.

당신이해야 할 일은 한 발 뒤로 물러나보다 추상적 인 수준에서 성취하려는 것을 설명하는 것입니다. IMHO가 처음부터 결함이있는 특정 솔루션을 얻는 방법을 묻습니다. 대신에 초기 목표를 설명하면 누군가가 더 잘 작동하는 접근 방식을 제안하게됩니다.

관련 문제