2013-07-30 3 views
1

연습과 재미를 위해 온라인 서비스에 연결하는 작은 Python 채팅 클라이언트를 사용하고 있습니다. 채팅을 통해 다른 사용자는 기본 사용자가 입력하는 것을 볼 수 있습니다. 다른 사용자가 프로그램 사용자가 보낼 항목을 입력하는 과정을보고 싶습니다. 뭔가사용자가 Python에서 입력 내용을 입력하는 과정을 결정하는 방법은 무엇입니까?

>>>Stranger: Hello, user. 
>>> 

반면에 입력되고 있기 때문에

>>>Stranger: Hello, user. 
>>>Hello, how are y... 

이것은 아마도 변수 True로을 hasSomethingEntered 설정합니다 사용자가 아직에 아무것도 입력하지 않았기 때문에 변수 False로을 hasSomethingEntered 설정합니다 입력 상자. 이 변수는 서버와 통신하는 별도의 스레드로 전달되어 클라이언트의 사용자가 입력 중임을 알립니다.

지금은 사용자의 채팅 항목을 얻기 위해 Python의 입력 명령을 사용하고 있습니다. 파이썬을 사용하여 내가하고 싶은 일을 할 수 있습니까? 그렇지 않다면 동일한 목표를 달성하는 데 사용할 수있는 대체 방법이나 언어를 권장 할 수 있습니까?

내가 여기서 성취하려는 것을 분명히하고 감사드립니다.

+2

파이썬에 대한 curses 모듈을 체크 아웃해야한다. (생각했던 창에서는 작동하지 않는다.) http://docs.python.org/3/library/curses.html – MWB

+0

고마워. 이것은 내가 필요한 것을 많이 가지고 있기 때문에 정말 대단합니다. 불행히도이 클라이언트를 Windows와 UNIX 시스템에서 모두 사용할 수있게하려고 노력하고 있으므로 두 가지 모두에서 작동하는 대안을 찾아야합니다. – Jerro39

답변

0

한 번에 한 문자 씩 읽을 수 있습니다. hasSomethingEntered은 첫 번째 문자 다음에 true이고, 줄 끝 뒤면 false가됩니다. 불행히도 이것은 플랫폼에 따라 다릅니다.

윈도우 : 당신은 아마 저장하고

import sys, termios 
previous_mode= termios.tcgetattr(sys.stdin.fileno()) 

sys.stdin의 모드를 복원 할 것입니다 후자의 경우에

import sys, tty 
tty.setraw(sys.stdin.fileno()) 
one_character= sys.stdin.read(1) 

:

import msvcrt 
one_character= msvcrt.getch() 

유닉스

import sys, termios 
termios.tcsetattr(sys.stdin.fileno(),termios.TCSADRAIN, previous_mode) 

각각이다.

+0

나는 문자열을 전체적으로 보는 대신 한 번에 한 문자 씩 처리하는 아이디어를 좋아합니다. 필자는 여기에 동적 인쇄에 대한 정보뿐만 아니라이 정보를 사용하여 필요한 작업을 수행 할 수있었습니다. http://stackoverflow.com/questions/2122385/dynamic-terminal-printing-with-python – Jerro39

관련 문제