python3.6 当 键盘监听 遇到 print("hello",end='') 时 发生异常

Js丶 2017-12-09 11:28:04

遇到了一个神奇的问题,麻烦各位大佬看一下,灰常感谢(鞠躬.jpg)
描述比较长,麻烦大佬忍耐一下(捂脸.jpg),我已经很努力的描述清楚了,再次感谢各位大佬(再次鞠躬.jpg)。


先贴代码:

import pythoncom
import pyHook

def onKeyboardEvent(event):

minput = str(event.Key)
if minput == "Y":
print("hello",end='')
else:
print(minput,end='')
return True

def main():

# 创建一个“钩子”管理对象
hm = pyHook.HookManager()

# 监听所有键盘事件
hm.KeyDown = onKeyboardEvent
# 设置键盘“钩子”
hm.HookKeyboard()

# 进入循环,如不手动关闭,程序将一直处于监听状态
pythoncom.PumpMessages()

if __name__ == "__main__":
main()


描述下异常:
因为不想让print自动输出换行,所以加了 end=‘’

但是当使用键盘监听后,print 加 end=‘’ 不能正常输出
但是 print 输出字符里含有 '\n' 时,加 end=‘’ 可以正常输出。
当单独运行(无键盘监听)后,print 一切正常。(下面是详细描述)

异常详细描述:

运行上面程序后,无论按什么键,都无任何输出。

当把 print("hello",end='')
改为 print("hello") 后,
按其他键无输出,当按 Y 时,会将前面按的键和“hello”一起输出。

例:依次按下 ASD123 此时无输出,接着按下 Y ,此时输出 ASD123hello 。如下图:


当把 print(minput,end='')
改为 print(minput) 后,一切正常,如下图:


我接着通过多次尝试发现:
print("hello\n",end='') 和 print("\nhello",end='') 可以像 print("hello") 一样正常输出。
其他情况均不能正常输出。

并且正常输出后,会把前面不正常未输出的值一起输出。
似乎是只要没有 ‘\n’ 就无法正常输出,有 ‘\n’ 才能正常输出。

但是单独运行 print("hello",end='') 很正常 如下图:


请问各位大佬这是怎么回事啊!该怎么解决啊!或者用什么办法可以实现 键盘输入一个字符 屏幕显示一个字符的(在同一行显示)。
谢谢~~~
...全文
381 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Js丶 2017-12-10
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
输出是行缓冲的,不够一行就不送到显示器输出,所以你观察到的就是这个现象 每次输出之后使用 sys.stdout.flush() 强制刷新就好了
真的可以了! 原来这么简单啊! 感谢大佬~ 刚接触python 没想到还有行缓冲这种东西 受教了。
ckc 2017-12-10
  • 打赏
  • 举报
回复
输出是行缓冲的,不够一行就不送到显示器输出,所以你观察到的就是这个现象 每次输出之后使用 sys.stdout.flush() 强制刷新就好了

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧