2011-02-08 2 views
2

저는 sys.stdin에서 사용자 입력을 받기 전에 서버에 연결해야하는 Python으로 채팅 프로그램을 작성하고 있습니다. 연결이되지 않으면 프로그램이 종료됩니다. 연결이 실패하고 연결을 시도, 입력이 쉘에 반향되는 동안 프로그램이 종료 한 후 입력이 전송 된 경우파이썬 프로그램에 stdin에서 읽을 내용이 있는지 어떻게 알 수 있습니까?

, 쉘에서이 실행 :

[email protected]:~$ python chat.py 
attempting to connect... 
Hey there!  # This is user input 
How are you?  # This is more user input 
connection failed 
[email protected]:~$ Hey there! 
Hey there!: command not found 
[email protected]:~$ How are you? 
How are you?: command not found 
[email protected]:~$ 

가인지 알 수있는 방법이 있나요이 는 sys.stdin에 입력되어 있으므로 채팅 프로그램이 종료되기 전에 읽을 수 있습니다.

나는 this similar question을 읽었지만 대답은 입력이 있는지 여부를 알려주는 방법이 아닌, 입력이 파이썬 프로그램에 파이프되어 있는지 확인하는 방법 만 설명합니다.

답변

3

나는이 문제에 대한 두 가지 일반적인 해결책이 있습니다 Non-blocking read on a subprocess.PIPE in python

+0

입력에 대한 설문 조사는 깔끔하지만 비 차단 I/O도 마찬가지입니다. 감사합니다! –

2

표준 입력에 비 블록 I/O에 대한이 SO 질문을 확인 할 필요가 있다고 생각 :

  • 이 나오지 않았어 때문에 종료 서버에 연결하지 않고 나머지 입력을 stdin에서 읽은 다음 버립니다. 이렇게하면 당면한 문제는 즉시 해결되지만 한 가지 상황 만 해결할 수 있습니다.

  • (더 나은) 실제 이벤트 루프를 설정하여 서버에 대한 연결이 백그라운드에서 수행되도록합니다. 즉, 프로그램이 연결을 시도하는 동시에 stdin에서 계속 읽는 중임을 의미합니다. 어떤 이유로 연결이 끊어지면 서버에 다시 연결하여 말할 필요가있는 경우이 솔루션을 사용하는 것이 좋습니다.

+0

두 솔루션 모두 입력이 없으면 아무 것도 읽지 않을 기다리고있을 것입니다 ... 피하려고하는 것입니다. 전체 '표준 입력에서 나머지 입력을 읽는'기본적으로 내 질문입니다. –

+0

stdin 또는 네트워크 소켓에서 차단 읽기를 사용하지 마십시오. –

관련 문제