У меня была пара мыслей о вашем сценарии, с некоторыми предложениями, которые никоим образом не критичны, но теоретически могут обеспечить небольшое улучшение производительности и , возможно, дополнительную стабильность. Ради преемственности и пользы других, желающих узнать, что решило первоначальную проблему, вот краткое изложение моих предыдущих комментариев сверху; перейдите к разделу после для некоторых дополнительных предложений:
Prelude
В то время не было ясно, какой сценарий вы приняли, но один из вариантов вызывает do shell script
изнутри действия Запуск AppleScript , изнутри Automator , но это может привести к снижению производительности в медленной системе, поэтому вы можете получить более отзывчивый рабочий процесс, если вы:
Разделите рабочий процесс на Выполнить сценарий Shell Shell для получения даты, затем Выполните действие AppleScript для выполнения битов AppleScript; OR
Делайте все это в рамках одного Запуска сценария оболочки , в рамках которого вы можете использовать osascript
для выполнения AppleScript. Это звучит эквивалентно тому, что он делает это наоборот, но это не так.
Вы должны хранить Добавление сценариев Команды отдельно от любых команд, принадлежащих приложению, которые отправляются в блоке tell
. В частности, переместите эту строку:
set _date to ((current date) + (days * 14))
до (и, следовательно, снаружи) блока tell
. Требование Системные события для возврата current date
- команды, которую он не понимает, - выдает ошибку (без вывода сообщений) и отправляет команду вверх по цепочке наследования, пока не достигнет экземпляра current application
, в который Сценарии дополнения команды загружены. Следовательно, это влияет на производительность, но неудивительно, что проблема была устранена: Workflow Service Runner не является приложением и, скорее всего, не имеет собственного экземпляра current application
, в который можно загрузить команды дополнений (они все равно будут доступны через сам экземпляр AppleScript
, но только из любого блока tell application
).
Дополнительные мысли
AppleScript можно улучшить / оптимизировать с помощью специального класса, в который мы можем привести объект date
и заставить его возвращать строку даты и времени в формате ISO 8601, например, "2019-06-20T09:41:45"
. Это проще и быстрее разложить на компоненты даты и собрать в стандартную строку даты в британском формате. Вот код:
property text item delimiters : { "/", "-", "T"}
return text items 1 thru 3 of ¬
((current date) + 14 * days as ¬
«class isot» as string) as text
В сторону: Если вы когда-нибудь перейдете от дат в британском формате к стандартному формату ISO-8601, например, "2019-06-20"
, код AppleScript упрощает и выполняет еще больше:
property text item delimiters : { "/", "-", "T"}
return text 1 thru 10 of ((current date) + ¬
14 * days as «class isot» as string)
В настоящее время вы получаете Системные события , чтобы вставить дату, эффективно печатая ее для вас. Это не плохой метод, это не хороший метод, но самое главное, он упускает из виду опцию, которая находится прямо у вас под носом:
А именно, опция Output replaces selected text
встроена прямо в Automator . Я думаю, что это легко пропустить из-за фразы «выделенный текст», который обычно воспринимается как явно выделенные выделения, которые всегда включают хотя бы один символ. Но, чтобы использовать номенклатуру AppleScript для имени класса, selection-object
в текстовом вводе всегда существует, и значение выделенного текста, по крайней мере, ""
. По сути, его всегда можно заменить, и это механизм, с помощью которого можно вставить текст в точку вставки.
Если вы выберете эту опцию, приведенный выше фрагмент AppleScript будет полным сценарием.
Это никоим образом не меняет жизнь, но для AppleScript это меньше работает и устраняет зависимость (без вызовов Системные события ), а с академической точки зрения это дает преимущества скорости, накладным расходам и стабильность.
Без необходимости использовать Системные события , теперь у вас есть возможность заменить AppleScript и использовать один сценарий оболочки:
Еще раз теоретическое улучшение.Имеет ли что-нибудь из этого действительно очевидные / практические выгоды?Возможно нет.Но я думаю, что хорошо иметь варианты.