gpt4 book ai didi

Python/在 bash 终端中调用 python 脚本 : What exactly happens when user presses Ctrl-C?

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:50 25 4
gpt4 key购买 nike

我需要控制 python 脚本的帮助。我想运行一个控制两个机器人的脚本。例程由一系列运动组成,这些运动要么移动 ARM ,要么移动夹具。代码形式如下:

def robot_exec():
# List of robot arm poses:
*many_many_lines_of_position_vectors*

# List of robot gripper poses:
*open position*
*close position*

while 1:
*Call a function that moves the robot arm(s) to a position on the list*
*Call a function that moves the robot gripper(s) to a position on the list*
*continue calling functions many times until the desired routine is complete*
n = raw_input("Restart the routine? (Y/N)")
if n.strip() == 'n' or 'N':
break
elif n.strip() == 'y' or 'Y':
continue
else:
print "Invalid input. Exiting..."
break

如果例程完成(即调用了每个函数),它会询问我是否要重新启动,如果我选择"is",则表现正常,这很好。

但是,如果我在例程中间按 ctrl-C,则会出现消息“重新启动例程?”仍然弹出并要求输入,但我不想要这样。我想要的是以下之一:

  1. 当且仅当用户按下 ctrl-C 时,完全退出所有内容,不询问任何问题。
  2. 当且仅当用户按下 ctrl-C 时,将机器人返回到起始位置(在该 ARM 姿势列表中定义),然后完全退出所有内容。

我的主要问题是,ctrl-C 实际上是如何工作的?我以为它只会退出脚本,但实际上它仍然打印内容并要求输入。这个广泛问题的一个子集是,我怎样才能获得所需的行为(按 ctrl-C 时完全退出所有内容)?

我意识到这是一种笨拙的方式来做我需要机器人做的事情,但这是我以有限的 python 知识能想到的最好的方式。

谢谢,

-阿德里安

最佳答案

关于信号的注释/答案在技术上是正确的(在 UNIX 上),但在 Python 中,CTRL+C 处理被巧妙地包裹起来。 Python 程序中发生的情况是,当您按下 CTRL+C 时,会引发 KeyboardInterrupt 异常。

现在,您的问题似乎出在您从列表中删除的代码中,即“调用机器人例程”部分中。该代码捕获KeyboardInterrupt

我猜您的代码或您调用的库代码会执行以下操作:

try:
# some long running code
# ...
except:
# something, or just pass

注意裸露的除了:。裸露的 except 几乎总是一件坏事。相反,您或图书馆应该这样做:

try:
# some long running code
# ...
except Exception:
# something to fix the situation

使用except Exception:不会捕获KeyboardInterrupt异常,这会让你适本地处理它,或者只是让程序退出。看看Exception class hierarchy .

关于Python/在 bash 终端中调用 python 脚本 : What exactly happens when user presses Ctrl-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com