python按键退出循环_关于python:如何通过击键杀死while循环?
我正在读取串行数据,并使用while循环写入csv文件。 我希望用户一旦感到自己已经收集了足够的数据,便能够终止while循环。
1
2
3
4
5while True:
#do a bunch of serial stuff
#if the user presses the 'esc' or 'return' key:
break
我已经使用opencv完成了这样的事情,但是它似乎在此应用程序中不起作用(而且我实在不希望为此功能导入opencv)...
1
2
3
4# Listen for ESC or ENTER key
c = cv.WaitKey(7) % 0x100
if c == 27 or c == 10:
break
所以。 如何让用户摆脱困境?
另外,我也不想使用键盘中断,因为脚本需要在while循环终止后继续运行。
最简单的方法是用通常的Ctrl-C(SIGINT)中断它。
1
2
3
4
5try:
while True:
do_something()
except KeyboardInterrupt:
pass
由于Ctrl-C导致KeyboardInterrupt升高,因此只需将其捕获到循环外并忽略它即可。
@克里斯:为什么不尝试一下。 (然后评论)
在do_something()中发出^C时,此崩溃(我得到错误回溯)。如何避免这种情况?
@Atcold什么错误?您正在使用什么操作系统?
我的do_something()从USB读取一些值,因此,如果在do_something()中的Im发出了^C,我会收到令人讨厌的通信错误。相反,如果while中的Im位于do_something()之外,则一切都很平滑。因此,我想知道如何处理这种情况。我不确定我是否足够清楚。
@Atcold因此,您有一个已编译的扩展模块供您使用。它是什么样的模块?它是包装的通用C库吗?
我打了一个pyVISA和一个matplotlib的电话,这样我就可以实时查看测量结果。而且有时会出现一些时髦的错误。我想我应该打开一个单独的问题,并停止污染您的答案。
有一种解决方案,不需要非标准模块,并且100%可运输
1
2
3
4
5
6
7
8
9
10
11import thread
def input_thread(a_list):
raw_input()
a_list.append(True)
def do_stuff():
a_list = []
thread.start_new_thread(input_thread, (a_list,))
while not a_list:
stuff()
只是对那些使用Python 3+的用户的注释:raw_input()已重命名为input(),线程模块现在为_thread。
根据python 3文档,在python 3中没有工作:"线程与中断发生奇怪的交互:KeyboardInterrupt异常将被任意线程接收。(当信号模块可用时,中断总是进入主线程。")
@Towhid但这不使用中断。它使用从stdin读取的内容。
@Artyer如果Im没记错的话,所有击键都会引发中断,因为它们是由硬件引发的。该代码对您有用吗?如果可以,您是否进行了任何特定更改?
@Towhid仅thread-> _thread和raw_input-> input。您必须按Enter才能输入行。如果要对任何键进行操作,请使用getch。
以下代码对我有用。它需要openCV(导入cv2)。
该代码由一个无限循环组成,该循环不断寻找按下的键。在这种情况下,当按" q"键时,程序结束。可以按下其他键(在此示例中为" b"或" k")以执行不同的操作,例如更改变量值或执行功能。
1
2
3
4
5
6
7
8
9
10
11import cv2
while True:
k = cv2.waitKey(1) & 0xFF
# press 'q' to exit
if k == ord('q'):
break
elif k == ord('b'):
# change a variable / do something ...
elif k == ord('k'):
# change a variable / do something ...
很好,但是cv2太重了,除非您已经将它用于其他用途。
为什么和255
pyHook可能会有所帮助。 http://sourceforge.net/apps/mediawiki/pyhook/index.php?title=PyHook_Tutorial#tocpyHook%5FTutorial4
请参阅键盘挂钩;如果您要进行特定的键盘交互,而不仅仅是使用KeyboardInterrupt,则可以更一般化。
另外,一般来说(取决于您的使用),我认为仍然可以使用Ctrl-C选项来杀死脚本是有意义的。
另请参阅上一个问题:在python中检测按下了哪些键
对于Python 3.7,我复制并更改了user297171的非常好的答案,因此它在我测试的Python 3.7中的所有情况下均可使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14import threading as th
keep_going = True
def key_capture_thread():
global keep_going
input()
keep_going = False
def do_stuff():
th.Thread(target=key_capture_thread, args=(), name='key_capture_thread', daemon=True).start()
while keep_going:
print('still going...')
do_stuff()
我不知道我是否做错了什么或什么,但是我不知道如何停止此循环?你是怎样做的?
@Mihkel,您必须按键。这将导致循环退出。
这可能会有所帮助
用-安装pynput
pip安装pynput
1
2
3
4
5
6
7
8
9
10
11
12from pynput.keyboard import Key, Listener
def on_release(key):
if key == Key.esc:
# Stop listener
return False
# Collect events until released
while True:
with Listener(
on_release=on_release) as listener:
listener.join()
break
总有sys.exit()。
Python核心库中的系统库具有退出功能,在进行原型制作时非常方便。
该代码将遵循以下原则:
1
2
3
4
5
6
7
8
9
10
11import sys
while True:
selection = raw_input("U: Create User
Q: Quit")
if selection is"Q" or selection is"q":
print("Quitting")
sys.exit()
if selection is"U" or selection is"u":
print("User")
#do_something()
python按键退出循环_关于python:如何通过击键杀死while循环?相关推荐
- Python按键精灵自动化_安装Python
嘀嘀嘀!大家好,我是PY拓海. 前面和大家说了那么多,话不多说,我们开始吧! 要使用Python编程,我们需要在电脑上搭一个Python的编程环境,步骤非常简单,下面我给大家演示. 下载Python( ...
- python代码设计测试用例_[CP_01] Python循环结构案例:模拟银行存取款业务,设计执行测试用例...
目录结构 一.案例描述 二.需求分析 1. 业务流程图 2. 业务项&测试场景 三.代码实现 四.用例设计&执行(简化模式) 1. 登录业务 2. 存款业务 3. 取款业务 4. 退卡 ...
- python 按键精灵脚本_[620]使用Python实现一个按键精灵
按键精灵想必很多人都玩过,使用录制功能将鼠标和键盘的操作录制下来,录制好后就可以通过回放自动执行之前录制的操作,可以设置重复执行的次数,这样就可以将一些重复的劳动交给脚本自动化去完成.使用Python ...
- pythonif循环_三. python 循环if,while,for....
一 .if流程控制语句 if语句: 格式: if表达式: 语句 1. if语句 #练习if语句 aa=int(input("请你输入一个数是否是奇偶:"))if aa%2==0:p ...
- python程序如何循环_在Python的一段程序中如何使用多次事件循环详解
背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...
- python怎么背景实现循环_在Python的一段程序中如何使用多次事件循环详解
背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...
- python永真循环_《Python语言程序设计》 —2.5.5 continue
2.5.5 continue continue语句用于结束本次循环并开始下一次循环.与break类似,对于多重循环情况,continue语句作用于它所在的最近的那重循环.例如,对于代码清单2-25,其 ...
- 以下选项中python用于异常处理结构_《Python 程序设计》复习题
目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...
- 什么叫python代码的优化_优化Python代码
如果你的问题是关于优化python代码(我认为应该是这样),那么你可以做各种各样的intesting的事情,但是首先: 你可能不应该痴迷于优化python代码!如果您正在使用最快的算法来解决问题,并且 ...
最新文章
- LSGO代码小组第18周复盘日志
- 分治习题--九章算法培训课第三章笔记
- codeforces1485 E. Move and Swap(dp)
- 从地理围栏看物联网安防
- 【Nginx那些事】nginx原理解析
- 老司机如何找素材,如何找灵感?
- iphone各机型参数对比_「科技美学」又是一年“双十一”,畅销机型有哪些?
- - 动规讲解基础讲解五——最长公共子序列问题
- VS2017如何创建c语言项目
- pascal 一些常用函数
- HTTP长连接与短连接、长轮询与短轮询及长轮询的实现概述
- Windows 11 Manager(win11优化大师)官方中文版V1.0.0 | windows11优化软件下载
- plsql窗口文件怎么找回_简单粗暴搞定网易云音乐限制!找回失去的灰色快乐
- 2009.6.29在淘宝网里订购了多普达P4550手机
- 微信小程序支付,微信支付【小白专用】
- Medium之1421.净现值查询
- nkoj 中山纪念中学 trie
- 最详细的golang + 私库(gitlab gitee) 模块开发 这一篇文章解决所有问题
- 盘点2019年25大人工智能趋势
- 关于等高线导出的方法和疑问讨论
热门文章
- 计算机软件著作权申请需要多久
- 计算机c硬盘打不开怎么办,电脑硬盘打不开该怎么办
- 抖店无法及时发货,应该怎么处理?
- 那天,电脑里的两个家伙吵起来了···
- 姓名替换python程序_【Python】实验:调试取名程序
- CSS 渐变与文本格式化
- 鸿蒙幼儿园胡艳玲,幼儿园招教中班主题《我们身边的科学》教案
- 【数据安全案例】上海特大非法获取公民个人信息罪案例
- Word2Vec 与《Distributed Representations of Words and Phrases and their Compositionality》学习笔记
- SQL存储过程进行成绩绩点换算