好的,所以我是 elementaryOS 设备上的AutoKey应用程序的新手,我只是在玩一些自定义脚本。
我确实感到奇怪的是,没有简单的选项可以终止正在运行的脚本。
因此,有没有什么漂亮的和简单方法可以实现此目的。
原谅无能。 ._。
最佳答案
当前,没有这样的方法。
Autokey使用一种简单的机制来同时运行脚本:每个脚本都在单独的Python线程内执行。它使用this wrapper使用ScriptRunner类运行脚本。
有一些方法可以杀死正在运行的任意Python线程,但是这些方法既不好也不简单。您可以在以下位置找到有关此问题的一般情况的答案:»Is there any way to kill a Thread in Python?«
有一种很好的可能性,但这并不是很简单,需要脚本的支持。您可以使用全局脚本存储库向脚本发送“发送” 停止信号。该API文档可以在here中找到:
假设这是您要中断的脚本:
#Your script
import time
def crunch():
time.sleep(0.01)
def processor():
for number in range(100_000_000):
crunch(number)
processor()
将这样的停止脚本绑定(bind)到热键:
store.set_global_value("STOP", True)
并修改您的脚本以轮询STOP变量的值,并在它为True时中断:
#Your script
import time
def crunch():
time.sleep(0.01)
def processor():
for number in range(100_000_000):
crunch(number)
# Use the GLOBALS directly. If not set, use False as the default.
if store.GLOBALS.get("STOP", False):
# Reset the global variable, otherwise the next script will be aborted immediately.
store.set_global_value("STOP", False)
break
processor()
您应该在每个热的或长时间运行的代码路径中添加这样的停止检查。
如果脚本中出现死锁,这将无济于事。
关于python - Linux-使用键绑定(bind)终止AutoKey脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51513269/