如何判断Python程序是否有从stdin读取的内容?

时间:2011-02-08 18:03:40

标签: python io

我正在用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程序,而不是如何判断是否有输入。

2 个答案:

答案 0 :(得分:3)

我认为你需要检查这个关于stdin上的非阻塞I / O的问题 Non-blocking read on a subprocess.PIPE in python

答案 1 :(得分:3)

这个问题有两种通用解决方案:

  • 退出时因为无法连接到服务器,请从stdin读取任何剩余的输入并将其丢弃。这解决了您当前遇到的问题,但仅针对一种情况。

  • (更好)设置一个真实的事件循环,以便与服务器的连接“在后台”发生,这意味着您的程序在尝试连接的同时仍在从标准输入读取。如果您需要说,如果由于某种原因连接断开,请重新连接到服务器,您将需要使用此解决方案。