- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要控制 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,则会出现消息“重新启动例程?”仍然弹出并要求输入,但我不想要这样。我想要的是以下之一:
我的主要问题是,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/
我是一名优秀的程序员,十分优秀!