我正在用Python编写一个聊天程序,需要在接受来自sys.stdin的用户输入之前连接到服务器。如果无法建立连接,则程序退出。
从shell运行,如果连接失败并且在尝试连接时发送了输入,则在程序退出后,输入将回显到shell:
jtink@gab-dec:~$ python chat.py
attempting to connect...
Hey there! # This is user input
How are you? # This is more user input
connection failed
jtink@gab-dec:~$ Hey there!
Hey there!: command not found
jtink@gab-dev:~$ How are you?
How are you?: command not found
jtink@gab-dev:~$
有没有办法判断sys.stdin上是否还有输入,以便我可以在聊天程序退出之前阅读它?
我已阅读this similar question,但答案仅描述了如何判断输入是否通过管道输入到python程序,而不是如何判断是否有输入。
答案 0 :(得分:3)
我认为你需要检查这个关于stdin上的非阻塞I / O的问题 Non-blocking read on a subprocess.PIPE in python
答案 1 :(得分:3)
这个问题有两种通用解决方案:
退出时因为无法连接到服务器,请从stdin读取任何剩余的输入并将其丢弃。这解决了您当前遇到的问题,但仅针对一种情况。
(更好)设置一个真实的事件循环,以便与服务器的连接“在后台”发生,这意味着您的程序在尝试连接的同时仍在从标准输入读取。如果您需要说,如果由于某种原因连接断开,请重新连接到服务器,您将需要使用此解决方案。