【python】如何优雅的终止while循环
1. 背景需求
python需要与外界或终端交互时,常常需要使用while循环一直跑。
如果需要终止程序,一般使用Ctrl+c,此时终端会打印一大堆backtrace,并且无法保留当前运行的状态,非常不优雅。
使用KeyboardInterrupt异常捕捉,可以实现优雅的终止while循环。
2. 实现方法
try:
while(True):
xxx
except KeyboardInterrupt:
print("KeyboardInterrupt, exit...")
exit()
3. 偶现Ctrl+c无法终止程序
经过定位发现在执行下列语句时,不会收到Ctrl+c的中断信号:
os.popen("adb shell getprop ro.product.device").read()
如果while循环写成了:
try:
while(True):
os.popen("adb shell getprop ro.product.device").read()
except KeyboardInterrupt:
print("KeyboardInterrupt, exit...")
exit()
则while循环的大部分时间都无法响应Ctrl+c信号,无法被终止。
解决方案:
使用op.popen("adb shell xxx")是为了判断adb是否连接。经过测试发现使用subprocess.run()同样可以判断设备是否连接,且不会关闭KeyboardInterrupt中断:
import subprocess
result = subprocess.run(['adb', 'shell', 'ls'], capture_output=True, text=True)
# 如果收到结果则返回0
if result.returncode == 0:
print("adb is connected")
# 如果没有收到结果,则返回1
else:
print("adb is not connected")
# 不要使用adb devices替代adb shell ls,因为adb devices在adb没有连接的时候也会返回有效结果:
# List of devices attached
【python】如何优雅的终止while循环的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- python 如何优雅地退出子进程
python 如何优雅地退出子进程 主进程产生子进程,子进程进入永久循环模式.当主进程要求子进程退出时,如何能安全地退出子进程呢? 参考一些代码,我写了这个例子.运行之后,用kill pid试试.pi ...
- break #立即终止本次循环
#!/user/bin/python# -*- coding:utf-8 -*-# print(111)# while True:# print(222)# print(333)# break #立即 ...
- Python编程基础[条件语句if 循环语句 for,while](二)
ython条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: if 判断条件: 执行语句……else: 执行语句…… x= ...
- python全栈 流程控制;while 循环 格式化输出 运算符 及编码
python全栈开发 1循环 2break和continue的区别 3格式化输出 4运算符 5编码 一.流程控制while循环 while条件: 代码块(循环体) 1.死循环; while True; ...
- python条件判断if···else、循环while和for
1.if···else条件判断基本语法 if 条件: 执行语句 elif 条件 : 执行语句 …… else : 执行语句 var=input("请输入表示会员级别的数字(1-5):&quo ...
- Python中的条件选择和循环语句
一.条件选择语句 Python中条件选择语句的关键字为:if .elif .else这三个.其基本形式如下: if condition: block elif condition: block ... ...
- 一个Python中优雅的数据分块方法
背景 看到这个标题你可能想一个分块能有什么难度?还值得细说吗,最近确实遇到一个有意思的分块函数,写法比较巧妙优雅,所以写一个分享. 日前在做需求过程中有一个对大量数据分块处理的场景,具体来说就是几十万 ...
- python自学笔记10:while循环和for循环
条件控制和循环控制是两种典型的流程控制方法,前面我们写了 if 条件控制,这节讲 for 循环和 while 循环. 循环是另一种控制流程的方式,一个循环体中的代码在程序中只需要编写一次,但可能会连续 ...
- 让Python更优雅更易读(第二集)
友情链接 让Python更优雅更易读(第一集) 1.装饰器 1.1装饰器特别适合用来实现以下功能 运行时校验:在执行阶段进行特定校验,当校验通不过时终止执行. 适合原因:装饰器可以方便地在函数执行前介 ...
随机推荐
- PC大屏自适应
通常来说PC端的页面并不像移动端页面那样对屏幕大小和分别率有那么强的依赖.一般的页面都是取屏幕中间的一块宽度(1280px), 两边留白, 高度随着内容的长度滚动.这样无论窗口怎么变化,页面都是可用的 ...
- AT cf17 final J Tree MST
AT cf17 final J Tree MST 考场上想出的黑题,然而写挂了-- 思路 考场推出 boruvka 算法,会的直接跳过就好. 结论:一个点向另外一个点连出的最小边,一定在最小生成树上. ...
- 6、oracle网络(监听)
oracle包含 1.软件 2.数据库 3.实例 4.监听(listener) 监听的特点 可以独立启动,就是说,数据库没有启动,监听可以启动:数据库启动,监听也可以不启动:数据库启动,监听也启动 监 ...
- STATA数据统计软件学习记录
STATA是一个数据统计软件,正如它的名字一样,STATA=statistic+data.STATA软件的功能和matlab类似,也可以用代码实现数据的统计与可视化.但几乎只能进行整行整列的数据处理, ...
- 使用gulp 压缩js
js 编写后文件太大,可以使用gulp 来进行压缩. 具体步骤如下: 1.创建一个工作目录 在该目录下安装 gulp npm install gulp 安装gulp-uglify 模块 npm ins ...
- 使用自定义 JsonConverter 解决 long 类型在前端的精度问题
问题 Javascript 的 number 类型存在精度限制,浏览器反序列化 JSON 时,无法完整保留 long 类型的精度. 在 JSON 序列化时将 long 转换为 string 进行传递就 ...
- python+playwright安装+使用vsocde运行代码
python虚拟环境 1.安装python,环境配置 2.修改pip镜像源 3.新增虚拟环境 注意路径,例子的路径是在python的目录下生成一个venv文件夹 进入venv文件夹,使用virtual ...
- CVE-2023-0461 漏洞分析与利用
PS: 文章首发于补天社区 漏洞分析 tcp_set_ulp里面会分配和设置 icsk->icsk_ulp_data,其类型为 tls_context tcp_setsockopt do_tcp ...
- 【分块】LibreOJ 6282 数列分块入门6
题目 https://loj.ac/p/6282 题解 数据范围 \(1 \leq n \leq 10^5\),因此进行分块最多分 \(\sqrt{10^5} ≈ 318\) 块.且数据是随机生成的, ...
- vue3 + vite 报错处理
TypeError: vite.defineConfig is not a function 执行命令:npm install @vitejs/plugin-vue -D config里面配置代码: ...