我正在读取串行数据,并使用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循环?相关推荐

  1. Python按键精灵自动化_安装Python

    嘀嘀嘀!大家好,我是PY拓海. 前面和大家说了那么多,话不多说,我们开始吧! 要使用Python编程,我们需要在电脑上搭一个Python的编程环境,步骤非常简单,下面我给大家演示. 下载Python( ...

  2. python代码设计测试用例_[CP_01] Python循环结构案例:模拟银行存取款业务,设计执行测试用例...

    目录结构 一.案例描述 二.需求分析 1. 业务流程图 2. 业务项&测试场景 三.代码实现 四.用例设计&执行(简化模式) 1. 登录业务 2. 存款业务 3. 取款业务 4. 退卡 ...

  3. python 按键精灵脚本_[620]使用Python实现一个按键精灵

    按键精灵想必很多人都玩过,使用录制功能将鼠标和键盘的操作录制下来,录制好后就可以通过回放自动执行之前录制的操作,可以设置重复执行的次数,这样就可以将一些重复的劳动交给脚本自动化去完成.使用Python ...

  4. pythonif循环_三. python 循环if,while,for....

    一 .if流程控制语句 if语句: 格式: if表达式: 语句 1. if语句 #练习if语句 aa=int(input("请你输入一个数是否是奇偶:"))if aa%2==0:p ...

  5. python程序如何循环_在Python的一段程序中如何使用多次事件循环详解

    背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...

  6. python怎么背景实现循环_在Python的一段程序中如何使用多次事件循环详解

    背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...

  7. python永真循环_《Python语言程序设计》 —2.5.5 continue

    2.5.5 continue continue语句用于结束本次循环并开始下一次循环.与break类似,对于多重循环情况,continue语句作用于它所在的最近的那重循环.例如,对于代码清单2-25,其 ...

  8. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  9. 什么叫python代码的优化_优化Python代码

    如果你的问题是关于优化python代码(我认为应该是这样),那么你可以做各种各样的intesting的事情,但是首先: 你可能不应该痴迷于优化python代码!如果您正在使用最快的算法来解决问题,并且 ...

最新文章

  1. LSGO代码小组第18周复盘日志
  2. 分治习题--九章算法培训课第三章笔记
  3. codeforces1485 E. Move and Swap(dp)
  4. 从地理围栏看物联网安防
  5. 【Nginx那些事】nginx原理解析
  6. 老司机如何找素材,如何找灵感?
  7. iphone各机型参数对比_「科技美学」又是一年“双十一”,畅销机型有哪些?
  8. - 动规讲解基础讲解五——最长公共子序列问题
  9. VS2017如何创建c语言项目
  10. pascal 一些常用函数
  11. HTTP长连接与短连接、长轮询与短轮询及长轮询的实现概述
  12. Windows 11 Manager(win11优化大师)官方中文版V1.0.0 | windows11优化软件下载
  13. plsql窗口文件怎么找回_简单粗暴搞定网易云音乐限制!找回失去的灰色快乐
  14. 2009.6.29在淘宝网里订购了多普达P4550手机
  15. 微信小程序支付,微信支付【小白专用】
  16. Medium之1421.净现值查询
  17. nkoj 中山纪念中学 trie
  18. 最详细的golang + 私库(gitlab gitee) 模块开发 这一篇文章解决所有问题
  19. 盘点2019年25大人工智能趋势
  20. 关于等高线导出的方法和疑问讨论

热门文章

  1. 计算机软件著作权申请需要多久
  2. 计算机c硬盘打不开怎么办,电脑硬盘打不开该怎么办
  3. 抖店无法及时发货,应该怎么处理?
  4. 那天,电脑里的两个家伙吵起来了···
  5. 姓名替换python程序_【Python】实验:调试取名程序
  6. CSS 渐变与文本格式化
  7. 鸿蒙幼儿园胡艳玲,幼儿园招教中班主题《我们身边的科学》教案
  8. 【数据安全案例】上海特大非法获取公民个人信息罪案例
  9. Word2Vec 与《Distributed Representations of Words and Phrases and their Compositionality》学习笔记
  10. SQL存储过程进行成绩绩点换算