Python 3程序在命令行中工作,而不是IDLE

时间:2014-11-08 17:57:49

标签: python python-idle

这个简单的程序在从命令行输入时有效,但不在IDLE中。

#
import msvcrt

while not msvcrt.kbhit():
   print('.', end='')
print("kbhit!")

我曾希望这个问题会在Python 3中消失。

有些问题:

  1. 有没有办法在IDLE中解决这个问题?
  2. 是否有其他Python代码编辑器没有此限制?
  3. 我正在写一篇关于我过渡到Python3的博客,我想解释为什么我必须将我的工作从IDLE转移到命令行。什么是这种明显不一致的简单,boxtop解释,适合传递给不了解Python的读者?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我将用户3666197的上一个答案反馈回0并将添加更多。空闲本身在一个过程中运行。除非以-n开头,否则Idle会运行您的代码,无论是在shell中输入的语句是&gt;&gt;&gt;或编辑器中的整个模块。键盘仍然连接到空闲进程,并且“.... 6 ............... 6 ...”中的回显键来自空闲代码,而不是您的代码。< / p>

出于好奇,我开始使用-n进行空闲,并且tk主循环仍然首先抓取关键事件,并且您的程序仍然无限期地运行。

[edit]我还在问题中运行了测试程序,保存为tem.py,其中包含以下内容

>>> import subprocess as sb
>>> sb.Popen("python c:/programs/python34/tem.py")

这与从控制台运行程序的工作方式相同。打一键打印'kbhit!'并关上了窗户。从第二个编辑器窗口运行时,这也适用。

我正在考虑将这个想法添加到Idle doc作为运行程序的一般方法,就像这个程序一样,与Idle的运行环境交互得很糟糕。 (这不是第一个。)或者也许应该有一个新的运行菜单项。我不知道该怎么称呼它。运行批处理?在控制台中运行?

在测试程序结束时添加input()会在键输入后保持窗口打开。

在循环中添加time.sleep(.5)会导致'。'打印要在缓冲区中收集,直到按下键才会显示。与Idle无关,如果程序在控制台中执行,则与

一样
C:\Programs\Python34>python tem.py

答案 1 :(得分:0)

这与python无关,但与已知的IDLE问题

有关

您可能想知道,IDLE是一个分层应用程序,它使用基于Tcl / Tk的Tkinter控制器部分,它还可以扫描和评估 .mainloop() 中与键盘相关的事件。这与你想要检测 .kbhit()

的意图相冲突

A1:

没有

A2:

是的,Notepad.exe除了许多其他编辑器。如果坚持使用IDE, PyScripter 可能是这样的候选者,因为它不依赖于Tcl / Tk Tkinter框架并且有许多智能选项(内部/外部python解释器,intellisense,object-introspection,help on导入模块&#39;通过各自的.__doc__ - 字符串和许多其他字符串

A3:

了解两个并发控制器的不可避免的冲突(.mainloop() + .kbdhit()

Btw 。,IDLE&#39; .mainloop()在您的示例中获胜:o)

N.b。:您的博客在哪里发布了?