2013-12-18 2 views
5

QR 판독기 (시스템에서 키보드로 표시)의 입력을 구문 분석하는 약간의 Python 스크립트를 작성하고 있습니다.Python이 콘솔 입력을 계속 구문 분석합니다.

현재 raw_input()을 사용하고 있지만이 함수는 수신 된 문자열을 프로그램에 제출하기 위해 EOF/end-of-line 기호를 기다립니다. 줄 끝으로 제한된 청크가 아닌 입력 문자열을 지속적으로 구문 분석 할 수있는 방법이 있는지 궁금합니다.

실제로 : - 비동기 적으로 지속적으로 콘솔 입력을 구문 분석 할 수있는 방법이 있습니까? - raw_input() (또는 이와 동등한 기능)을 변경하여 프로그램으로 읽은 문자열을 제출하기 위해 다른 문자를 찾으십니까?

+0

당신은 ['curses.window.getch'] (http://docs.python.org/3/library/curses.html#을 시도 할 수 있습니다 curses.window.getch)를 no-delay 모드로 설정하십시오. –

+1

이 장치로 IO를 처리하는 것은 무엇입니까? 나는 당신이 서브 프로세스에서 그 구성 요소를 실행할 필요가 있다고 생각한다. – wim

+0

QR 리더 드라이버 소프트웨어는 개별 문자들을 검색하기위한 API 함수를 가지고 있는가? 또한 Windows에서 키보드 문자를 읽는 msvcrt.getch()와 같은 입력 소스에서 단일 문자를 읽는 OS 의존적 인 방법이있을 수 있습니다. – martineau

답변

1

그것은 당신이 일반적으로 두 가지 문제를 해결하기 위해 노력하고있는 것처럼 보인다

  • 이 첫 번째의 경우 해당 입력 비동기
  • 구문 분석

    1. 이 덩어리에서 입력을 읽기를, 그것은 크게 따라 달라집니다 입력 함수의 특성에 관해서는 호출하지만 표준 입력에 대해서는 다음과 같이 사용할 수 있습니다.

      sys.stdin.read(1) 
      

      비동기 적으로 구문 분석하는 방법에는 여러 가지가 있습니다. 파이썬은 동기식이므로 일부 서브 프로세스 호출이 반드시 필요합니다. 수동으로 the subprocess library을 사용하여 함수를 생성하는 것이 하나의 옵션입니다. 또한 Redis 또는 일부 경량 작업 대기열과 같은 것을 사용하여 입력 청크를 가져 와서 다른 백그라운드 스크립트로 읽고 처리하도록 할 수 있습니다. 마지막으로 gevent은 비동기 프로세스를 생성하기위한 매우 유명한 코 루틴 기반 라이브러리입니다. gevent를 사용하여,이 모든 셋업은 다음과 같이 보일 것입니다 :

      class QRLoader(object): 
          def __init__(self): 
           self.data = [] 
      
          def add_data(data): 
           self.data.append(data) 
      
           # if self._data constitutes a full QR code 
           # do something with data 
           gevent.spawn(parse_async) 
      
      def parse_async(): 
          # do something with qr_loader.data 
      
      qr_loader = QRLoader() 
      
      while True: 
          data = sys.stdin.read(1) 
          if data: 
           qr_loader.add_data(data) 
      
    관련 문제