Запуск одного сценария автозапуска из другого сценария автозапуска?

#linux #autokey

#linux #автозапуск

Вопрос:

Прямо сейчас у меня есть два сценария автозапуска (для модульности), один, который открывает файл, и другой, который помещает в него текст.

Тот, который открывает файл, имеет горячую клавишу F1 (и мы будем вызывать этот скрипт 1 для простоты), а тот, который вводит в него текст, имеет горячую клавишу F2 . Мне нужен новый скрипт автозапуска, который при нажатии F3 запускал бы как 1 скрипт, так и 2 скрипт.

Я пробовал сделать 3 так, чтобы скрипт просто отправлял ключи F1 и F2 , но время совсем сбилось. Было бы лучше , если бы я мог просто позвонить 1 и 2 позвонить 3 . Возможно ли это?

Спасибо!

Ответ №1:

https://github.com/autokey/autokey/blob/fc7c6b90f3f28a57ad256829ef2b69e3be5148d2/lib/autokey/scripting.py#L1242

engine.run_script("<description>")

должно сработать

«Описание» в этом контексте обычно является именем скрипта на боковой панели в интерфейсе автозапуска. Если вы откроете .json файл для скрипта, вы наверняка сможете его увидеть, но это будет имя, отображаемое на боковой панели, если у вас нет повторяющихся имен для скриптов в той же папке или в каком-либо другом пограничном сценарии

Ответ №2:

Автозапуск не является рекурсивным. Он не проверяет вывод фразы автоключа или скрипта для поиска горячих клавиш или сокращений триггеров, которые могли бы вызвать дальнейшие действия. Вот почему ваше первоначальное решение не работает.

Это зависит от того, что вы на самом деле пытаетесь сделать.

Если у вас есть несколько независимо полезных скриптов, лучшим подходом является тот, который предлагает @Icallitvera.

Если вы просто хотите модулировать общую функциональность, вы можете создать модули функций Python и поместить их в каталог модулей AutoKey. Затем вы можете импортировать их в любой скрипт AutoKey, который в них нуждается.

Вы можете найти / установить каталог модулей из главного меню AutoKey через Settings->Configure AutoKey->Script Engine .

На данный момент этот подход ограничен, поскольку сценарии, вызываемые таким образом, не имеют (легко) доступа к API AutoKey, поэтому они не могут включать в себя какие-либо вызовы API. Мы планируем исправить это в следующем крупном выпуске, AutoKey 0.96. Если вам действительно нужно сделать это сейчас, обратитесь в нашу службу поддержки или в Gitter.

Ответ №3:

Я столкнулся с той же проблемой, и единственный способ обойти это ограничение — использовать exec() функцию. Поскольку скрипты с функциями для совместного использования уже были в папке пользователя AutoKey, я использовал это. Итак, чтобы загрузить общие функции моего пользовательского модуля «mygame» в скрипт автозапуска, который я использовал:

 exec(open(engine.configManager.userCodeDir   "/"   "mygame.py").read())
 

Чтобы избежать конфликтов имен при «импорте» более одного скрипта и создать ощущение, похожее на модуль, я помещаю функции в классы и создаю экземпляр с переменной, которая называется как модуль.

Итак, в итоге это выглядит так:

mygame.py:

 import time

class MyGame:
    def GameReload(self):
        self.GameExitNoSave()
        time.sleep(0.3)
        self.GameLoadCurrent()

    def GameExitNoSave(self):
        keyboard.send_key('d')
        time.sleep(0.1)
        keyboard.send_key('<up>')
        time.sleep(0.05)
        keyboard.send_key('<enter>')

    def GameLoadCurrent(self):
        keyboard.send_key('<down>')
        time.sleep(0.1)
        keyboard.send_key('<down>')
        time.sleep(0.1)
        keyboard.send_key('<enter>')
        time.sleep(0.5)
        keyboard.send_key('<enter>')
        
mygame = MyGame()   
 

Пользовательский скрипт в AutoKey:

 exec(open(engine.configManager.userCodeDir   "/"   "mygame.py").read())

mygame.GameReload():