2012-06-29 5 views
0

파이썬 파이핑에 완전히 익숙하지만 내 문제에 대한 해답이라고 생각합니다. raw_input에서 끝이없는 입력을 받아서 결과를 명령 행에 출력하는 파일 cleverbot.py가 있습니다. 이것은 전체 시간 동안 while 루프에 머무르는 동안 이루어지며, "bye"라고 말하면 스크립트가 종료됩니다.while 루프를 사용하여 파이썬 2.6에서 파이핑하기

이제 누군가가이 스크립트의 입력을 파이프 처리 한 다음 루프를 종료하지 않고 출력을받을 수있는 예제를 제공 할 수 있습니까? 루프는 세션의 역할을하며이 루프 내에서 스크립트가 끊임없이 계속 실행되는 동시에 입력을 파이프 할 수있는 것이 중요합니다.

다음은 코드 스 니펫입니다. 모든 것을 그 pycleverbot 라이브러리에 갖기를 원하는 사람에게.

def main(): 
    import sys 
    cb = Session() 

    q = '' 
    while q != 'bye': 
      try: 
        q = raw_input("> ") 
      except KeyboardInterrupt: 
        print 
        sys.exit() 
      print cb.Ask(q) 

cb = Session()은 처음 만들어진 후 다시 만들 수 없습니다. 이것이 while 루프가있는 이유입니다. 나는 while 루프를 사용하지 않는 방법을보기 위해 필요한 로직이 부족합니다.

희망적입니다. 감사합니다.

+0

xD – Linkandzelda

+0

왜 sys.stdin을 사용하지 않을까요? "입력을 파이프 할 수있는 위치"란 하나의 "세션"동안 여러 개의 가능한 파일을 나타내는 입력 (복수)입니다. 그렇다면 그것은 완전히 다른 종류의 질문/답변입니다. –

+0

예 복수형입니다. 기본적으로 여러 줄의 텍스트가 입력으로, 여러 줄의 텍스트가 출력으로 사용됩니다. 가장 어려운 일은 대화를 그대로 유지하는 것입니다.이 경우는 "세션"입니다. 질문을 스 니펫 코드로 업데이트하겠습니다. – Linkandzelda

답변

1

트릭은 처음에는 while 루프를 사용하지 않는 것입니다.

for line in sys.stdin: 
    if line.lower().strip() == 'bye': 
    break 
    sys.stdout.write(do_something(line)) 
    sys.stdout.flush() 
+0

감사합니다. 게시물에 코드 스 니펫을 추가하면 어떻게 작동하는지 더 자세히 설명 할 수 있습니다. 나는 while 루프없이 어떻게 작동 하는지를 알기 위해 필요한 로직이 부족하기 때문에. – Linkandzelda

+0

이것은 매우 잘 작동했습니다. 감사. – Linkandzelda

관련 문제