Python基础之程序暂停
当我们执行某些程序时,由于机器速度很快导致肉眼无法直接看到执行结果时程序便停止运行。这时候我们迫切需要在程序中暂停,专业术语叫做阻塞。下面列举几种常用的程序暂停方法:
方法一input()
用法:直接在欲等待处输入input()即可。
print("waiting for input")
input()
print("continue")
- 1
- 2
- 3
- 4
result
![]()
[外链图片转存失败(img-GSxx5Mzo-1567578483975)(https://i.loli.net/2019/04/14/5cb3209c80d24.png)]
特点:
- 优点:不需要借助模块,执行到此处阻塞等待人工输入。
- 缺点:程序结束时候需要强制结束或者在控制台输入值。
方法二time.sleep()
用法:导入time模块;在欲等待处输入time.sleep(time)(time为数字,表示秒)即可。
import time
print("waiting for 10s")
time.sleep(10)
print("continue")
- 1
- 2
- 3
- 4
result
![]()
[外链图片转存失败(img-QkaLTZZS-1567578483981)(https://i.loli.net/2019/04/14/5cb320338ba09.png)]
特点:
- 优点:动态等待程序执行完毕,不需要强行终止,等待时间可调。
- 缺点:需要导入模块,等待规定时间结束后便继续往下执行。
方法三os.system(“pause”)
用法:导入os模块;在欲等待处输入os.system(“pause”)即可。
import os
print("waiting for pause")
os.system("pause")
print("continue")
- 1
- 2
- 3
- 4
好像只有在windows下才可以使用
特点:
- 优点:不必强行终止;不必等待时间,可自由按下enter继续。
- 缺点:导入模块,执行系统命令。
方法四自己写的小模块可以实现按任意键继续…
功能有多大用途今天暂且不说,但我觉得应该有很多人也想在python下实现这个功能,这样当自己写的python程序运行时, 突然给出这么一个提示,然后自己再来个帅气的回车,我觉得肯定给人一种非常专业的感觉,最起码自己肯定被自己迷倒了,所以今天我们就学习下这段代码,这里定义了一个函数,所以你可以嵌入到你的程序中,在任何你希望调用的地方调用它即可,使用非常的方便,代码如下:
import os
import sys
import termios
def press_any_key_exit(msg):
# 获取标准输入的描述符
fd = sys.stdin.fileno()
# 获取标准输入(终端)的设置
old_ttyinfo = termios.tcgetattr(fd)
# 配置终端
new_ttyinfo = old_ttyinfo[:]
# 使用非规范模式(索引3是c_lflag 也就是本地模式)
new_ttyinfo[3] &= ~termios.ICANON
# 关闭回显(输入不会被显示)
new_ttyinfo[3] &= ~termios.ECHO
# 输出信息
sys.stdout.write(msg)
sys.stdout.flush()
# 使设置生效
termios.tcsetattr(fd, termios.TCSANOW, new_ttyinfo)
# 从终端读取
os.read(fd, 7)
# 还原终端设置
termios.tcsetattr(fd, termios.TCSANOW, old_ttyinfo)
if __name__ == "__main__":
print("运行中...")
press_any_key_exit("按任意键继续...")
print ("继续运行中...")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
![]()
代码不多解释,看注释,这里要说一下termios模块,这个模块提供了一个接口可以控制tty终端的Io,它所有函数第一个参数需要一个文件描述符,可以是整型的文件描述符,也可以是个文件对象,因为它可以控制在终端的显示设置,常用场景就是用户在终端输入密码时不要显示出来,就跟我们用root登陆系统时系统给出输入密码提示符一样, 代码实现如下:
实现类似密码登录的效果
如果密码输入不正确的时候将会进行循环
def getpass(prompt="Password: "):
import termios, sys
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
new[3] = new[3] & ~termios.ECHO
try:
termios.tcsetattr(fd, termios.TCSADRAIN, new)
passwd = input(prompt)
if passwd == '888':
print("right")
pass
else:
print(passwd)
print("wrong")
getpass()
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
return passwd
passwd = getpass()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
最后一次输入设置的正确密码就可以了
(可以将这个文件权限设置为他人不可读哈哈哈)
![]()
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法缩进规则416623 人正在系统学习中
评论记录:
回复评论: