input的技巧
不幸的是,在Windows中,点击文件图标的结果也许不是特别令人满意。事实上,之前编写的脚本在点击后产生了一个令人困惑的“一闪而过”的结果,而不是Python程序的入门者所期盼的结果反馈。这不是Bug,但是需要做某种操作才能够让Windows处理打印的结果。
在默认情况下,Python会生成弹出一个黑色DOS终端窗口作为文件的输入或输出。如果脚本打印后退出了,也就是说,它仅是打印后退出终端窗口显示,然后文本在这里打印,但是在程序退出时,终端窗口关闭并消失。除非你反应非常快,或者是机器运行非常慢,否则看不到任何输出。尽管这是很正常的行为,但是这也许并不是你所想象的那样。
幸运的是,这样的问题很好解决。如果需要通过图标点击运行脚本,脚本输出后暂停,可以简单地在脚本的最后添加内置input函数的一条调用语句(Python 2.6中的raw_input,参见前面的注释)。例如:
A first Python script
import sys # Load a library module
print(sys.platform)
print(2 ** 100) # Raise 2 to a power
x = ‘Spam!’
print(x * 8) # String repetition
input() # <== ADDED
一般来说,input读取标准输入的下一行,如果还没有得到的话一直等待输入。在这种情形下执行的实际效果就是让脚本暂停,直到按下回车键为止。
现在介绍的这个技巧,往往只在Windows中才是必要的,并且只是当脚本打印文本后退出或只是当通过点击文件图标运行脚本才是必要的。当且仅当以上这三个条件全部都生效时,才应当在顶层文件的最后增加这个调用。没有理由在任何其他的情况下在文件中增加这个调用(除非你超出常理地热衷于按下计算机的Enter键)。这听起来是显而易见的事情,但确是现实的类中的另一个常见的错误。
在我们继续学习之前,注意在输入时所使用的input调用相当于在输出时使用的打印语句。这是读取用户输入的最简单的办法,并且实际上它比这个例子中的应用更全面。例如,input。
•可选的接受字符串,这些字符串将作为提示打印出来[例如,input(‘Press Enter to exit’)]。
•以字符串的形式为脚本返回读入的文本[例如,nextinput = input()]。
•在系统shell的层面上支持输入流的重定向(例如,python spam.py < input.txt),就像输出时的打印语句一样。
在后续文章中,我们将会以更复杂的方法使用input。例如,我们将会在交互循环中使用它。
注意:版本差异提示:如果你使用Python 2.6或者更早的版本,在这段代码中使用raw_input()而不要使用input()。在Python 3.0中,前者重新命名为后者。从技术上讲,Python 2.6也有一个input,但是,它对字符串求值,就好像它们是输入到一个脚本的程序代码一样,因此,该函数在这个环境中无效(一个空字符串会产生错误)。Python 3.0的input(以及Python 2.6的raw_input())直接把输入的文本作为一个字符串返回,而不会求值。要在Python 3.0中模拟Python 2.6的input,使用eval(input())。