İşleyicileri bir Kütüphane Komut Dosyasından “Script Kullan” ve “Komut Dosyasını Yükle” komutu ile çağırmanın avantajları ve dezavantajları nelerdir?


3

İlk senaryoda, tüm işleyicileri ve snippet'leri içeren bir komut dosyası var. Bu betiğin dosya adı “Jimz_Handlerz.scpt” dır ve burada bulunur… / Kullanıcılar / Smokestack / Library / Script Kütüphaneleri

İşleyiciyi yeni bir AppleScript dosyasından çağırmak, komut dosyası kitaplığımı (satır 1) bildirmemi gerektiriyor ve ardından işleyiciyi ikinci satırda istediğim zaman arayabilirim. Bunun gibi:

use myHandlerz : script "Jimz_Handlerz.scpt"

myHandlerz's get_fileExtensions()

Bu sonraki senaryoda, ilk örnekle aynı dosyayı yüklemek için “script komutunu” komutunu kullanıyorum ancak bu dosya masaüstünde bulunuyor

property jimzHandlerz : load script ¬
    (alias "Macintosh HD:Users:Smokestack:Desktop:Jimz_Handlerz.scpt")

jimzHandlerz's get_fileExtensions()

Bu, her iki farklı senaryodan çağıracağım komutu içeren asıl işleyicidir.

on get_fileExtensions()
    tell application "Finder"
        set theDownloadsfolder to (path to downloads folder)
        set theFiles to the name extension of every file of theDownloadsfolder
    end tell
    AST copy list theFiles without keeping duplicates -- Needs AppleScript Toolbox 2_0_8.osax Scripting Addition in /Users/"Name"/Library/ScriptingAdditions
end get_fileExtensions

Öyleyse sorum şu, senaryo 1'i kullanmayı tercih edeceğim durumlar var mı ve senaryo 2'nin daha iyi olacağı durumlar var mı?

Güncelleştirme:

İşte size küçük bir bilgi harikası: Asıl sorumun ilk örneğindeki gibi bir komut dosyası kitaplığı komut dosyasından ya da komut dosyası paket dosyasından işleyicileri çağırma senaryosunu kullanma. kitaplık, bir komut dosyası paketidir ve “Kaynak Kitaplığı” klasörünün içine “Kod Kitaplıkları” adı verilen “Kaynak Kodları” adında bir dosya ekleriz, “Dosya Kodları” klasöründeki dosya bulunamıyorsa, dış işleyicilerimizi çağırıyoruz. , daha sonra bu komut dosyası bir hata atmaz, çünkü kaynak klasörünü komut dosyası kitaplıkları için de arar.

enter image description here


1
+1’e gidiyorum, çünkü yetkili bir cevap iyi olurdu.
user3439894

1
Şahsen, yeniden kullandığım çok sayıda kod içeren, kopyala ve yapıştır yoluyla birkaç dosya saklıyorum; ancak yazdığım her komut dosyası / uygulamayı olabildiğince kendi kendine yetmeyi tercih ediyorum. IMO bağımsız olduğunda bakımı çok daha kolaydır ve harici kaynakların mevcut olduğundan emin olmak için ek kod eklemem gerekmez, vb. Ayrıca, bunu yaparken bir avantaj göreceğimi boyutta bir şey yazmıyorum. oluşturulan varsayılan dosyaların ötesinde çok dosyalı bir senaryo ve özel bir .icns dosyası. Çalıştırılabilir bir üçüncü tarafa bağımlı bir şey yazarsam, örn. cliclick, bir kopyası Kaynaklar klasörüne gider.
user3439894

Kopyalama ve yapıştırma konusunda hemfikir olduğumu düşünüyorum. Senaryoya baktığımdan bu yana bir süre geçmişse ve işleyiciyi başka bir dosyadan çağırıyorsa, hangi komutu çağırdığımı görmek için ikinci senaryoyu açmadığım sürece komutların ne olduğu konusunda bilgim yok.
wch1zpink

Yanıtlar:


1

Komut dosyalarımın her birine, temel olarak dosyaya yazan bir “script logger” ekledim… Komut dosyası adı ve son çalıştırıldığı tarih ve saat.

Kayıt işleminin tüm komutları, “Jimz_Handlerz.scptd” ayrı bir dosyada bulunan ve komut dosyası kütüphanelerim klasöründe bulunan bir komut dosyası kitaplığı olarak kullanılan bir komut dosyası nesnesinde bulunur.


“Jimz_Handlerz.scptd” dosyasında yer alan bu aşağıdaki kod, günlüğü işleyen script nesnesidir.

script scriptRunLog2
    try
        writeToFile()
    end try

    on writeToFile()
        set currentDate to (current date) as string
        -- The "." At The Beginning Of The Filename In The Next Line
        -- Makes That File A "Hidden" File
        set theFile to (path to desktop as text) & ".script_run_log.txt" 
        set theFile to POSIX path of theFile
        set myName to name of (info for (path to me))
        set theText to myName & " was last run on " & currentDate
        try
            set writeToFile to open for access theFile with write permission
            write theText & linefeed to writeToFile as text starting at eof
            close access theFile
        on error errMsg number errNum
            close access theFile
            set writeToFile to open for access theFile with write permission
            write theText & linefeed to writeToFile starting at eof
            close access theFile
        end try
    end writeToFile
end script

Bu komut dosyası nesnesindeki komutları başka bir komut dosyasından çalıştırabilmemin iki yolu vardır.

SEÇENEK 1 Başka bir komut dosyasının en üstüne eklenen "komut dosyasını yükle" seçeneğini kullanma

property theLibrary : (path to home folder as text) & "Library:Script Libraries:Jimz_Handlerz.scptd"
property jimzHandlerz : load script alias theLibrary
run jimzHandlerz's scriptRunLog2

SEÇENEK 2 Diğer komut dosyalarının en üstüne eklenen "use" seçeneğini kullanın. "Jimz_Handlerz.scptd" komut dosyası kütüphanelerim klasöründe bulunduğu için konumunu tanımlamam gerekmiyor

use jimzHandlerz : script "Jimz_Handlerz.scptd"
run jimzHandlerz's scriptRunLog2

Asıl mesajımdaki soruya gelince…

Seçenek 1 kullanırsam, komut dosyası günlüğü hangi komut dosyasını saat ve tarihle birlikte çalıştırdığımı kaydeder.

Ancak, seçenek 2'yi kullanırsam, komut dosyası günlüğü "Jimz_Handlerz.scptd" kodunu çalıştıran komut dosyası olarak kaydeder.

Kısacası, bu senaryoda, seçenek 1 kullanmak en iyisidir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.