好的,所以我是 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/

10-11 23:01
查看更多