select python_Python select()行为很奇怪

我在理解select.select的行为时遇到了一些麻烦.请考虑以下

Python程序:

def str_to_hex(s):

def dig(n):

if n > 9:

return chr(65-10+n)

else:

return chr(48+n)

r = ''

while len(s) > 0:

c = s[0]

s = s[1:]

a = ord(c) / 16

b = ord(c) % 16

r = r + dig(a) + dig(b)

return r

while True:

ans,_,_ = select.select([sys.stdin],[],[])

print ans

s = ans[0].read(1)

if len(s) == 0: break

print str_to_hex(s)

我已将其保存到文件“test.py”.如果按如下方式调用它:

echo 'hello' | ./test.py

然后我得到了预期的行为:选择never块并打印所有数据;程序然后终止.

但如果我以交互方式运行程序,我会得到一个最不受欢迎的行为.请考虑以下控制台会话:

$./test.py

hello

[',mode 'r' at 0xb742f020>]

68

程序然后挂在那里; select.select现在再次阻止.直到我提供更多输入或关闭输入流,即使已经有字符在等待,也会打印下一个字符(以及其余所有字符)!任何人都可以向我解释这种行为吗?我在一个我编写的流隧道程序中看到了类似的东西,它破坏了整个事件.

谢谢阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值