Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11
  1. #1
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290

    AS läuft als Droplet aber hakt als Ordneraktion

    Hallihallo. Ich kenne mich nicht sehr gut aus mit Applescript, habe aber vor langer Zeit eine Ordneraktion zusammengebastelt, die mir aus einem immergleichen Text und einer individuellen Dateinummer ein PDF umbenennt.

    - der Text lautet z.B. "Arbeitsdatei_"
    - die Dateinummer wird aus einer FileMaker-Anwendung via FileMaker-Script in die Zwischenablage kopiert (dort steht dann z.B. "4567")
    - das PDF wird aus der FileMaker-Anwendung via FileMaker-Script in einen festgelegten Ordner exportiert (und trägt beim Export immer den gleichen Namen)
    - die umbenannte Datei soll dann in einen anderen Ordner verschoben werden (z.B. nach "Arbeitsdateien")

    Bisher hat das gut funktioniert, seit meinem Wechsel von 10.4.11 Tiger zu 10.5.8 Leopard hakt es schon mal in der Form, dass dieses miniwinzigkleine Script manchmal sehr lange braucht, manchmal sehr schnell geht und manchmal gar nicht geht.

    Das Script habe ich testweise auch mal als Droplet geschrieben und gespeichert, da liefert es zuverlässig und wiederholbar das gewünschte Ergebnis. Liegt das an Leopard oder an meinem Script?


    ----------------------------------------------
    on adding folder items to this_folder after receiving added_items
    -- im Droplet steht in der ersten Zeile stattdessen "on open added_items"

    try
    set theCount to number of items in added_items
    repeat with i from 1 to theCount
    set curItem to (item i of added_items)
    set Dateinummer to the clipboard
    tell application "Finder"
    set name of curItem to "Arbeitsdatei_" & Dateinummer & ".pdf"
    move curItem to "HD_Mac:Benutzer:Name:Dokumente:Arbeitsdateien :"
    end tell

    tell application "Preview" to open curItem

    end repeat

    tell application "Preview"
    activate
    end tell

    end try

    -- im Droplet steht in der letzten Zeile stattdessen "end open"
    end adding folder items to
    ----------------------------------------------

    P.S: Der angegebene Pfad endet im Script auf einen Doppelpunkt, hier in Apfeltalk steht davor noch ein Leerzeichen, ich weiss nicht warum. Und ich weiss auch leider nicht, wie ich das Script so hier hineinkopiere, dass die Farben und die Formattierung erhalten bleiben.

  2. #2
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    Hm, hat keiner einen Tipp? Hier noch mal das Problem in Kurzform:

    - ein Filemaker-Script übergibt eine Zahl an die Zwischenablage und exportiert ein PDF in einen Ordner
    - das Ordner-Script soll das PDF mit der Zahl aus der Zwischenablage umbenennen
    - beim ersten Versuch klappts innerhalb von Sekundenbruchteilen, jeder weitere hakt (d.h. funktioniert mit extremer Verzögerung oder funktioniert gar nicht)
    - hier das Script:

    ----------------------------------------------
    on adding folder items to this_folder after receiving added_items

    set theCount to number of items in added_items
    repeat with i from 1 to theCount
    set curItem to (item i of added_items)
    set Dateinummer to the clipboard
    tell application "Finder"
    set name of curItem to "Arbeitsdatei_" & Dateinummer & ".pdf"
    end tell
    end repeat

    end adding folder items to
    ----------------------------------------------

    Bin für jeden Tipp dankbar!!

  3. #3
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Hallo!

    Ordneraktionen liefen schon in Tiger bei vielen Usern nicht immer zuverlässig. In Leopard wurden sie geändert (-> nicht mehr vom Finder gestartet), damit aber leider auch noch unzuverlässiger.

    Besser ist es, das in 10.4 eingeführte launchd zu nehmen.
    Hier mal eine Grundversion deines Skriptes, wie ich es schreiben würde:


    set x to "Pfad:zum:überwachenden:Ordner:"
    set y to "Pfad:zum:Zielordner:"
    tell application "Finder"
    set theFiles to every file of folder x
    repeat with i in theFiles
    set m to i as alias
    --set the name of i to usw...
    move m to folder y
    end repeat
    end tell


    Das Skript speichern und als LaunchAgent laufen lassen
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>de.hifi.ftopdf</string>
        <key>Program</key>
        <string>/usr/bin/osascript</string>
        <key>ProgramArguments</key>
        <array>
            <string>osascript</string>
            <string>/Pfad/zum/gespeicherten/xyz.scpt</string>
        </array>
        <key>QueueDirectories</key>
        <array>
            <string>/Pfad/zum/überwachenden/Ordner</string>
        </array>
    </dict>
    </plist>
    Kopieren, in TextEdit als reinen Text öffnen, Pfade anpassen und als .plist im Ordner (~)/Library/LaunchAgents speichern (im Beispiel unter den Namen "de.hifi.ftopdf.plist")
    Im Terminal mit folgender Zeile aktivieren (oder aus- und einlocken)
    Code:
    launchctl load ~/Library/LaunchAgents/de.hifi.ftopdf.plist
    QueueDirectories überwacht LEERE Ordner auf neue Dateien. Ansonsten WatchPaths nehmen, welches Änderungen überwacht.
    Ich habe auf die Schnelle mal einen Link zu launchd gefunden ... da mag es bestimmt noch bessere geben: Hier

    Falls du einen Plist-Editor installiert hast, so geht das Erstellen der Plist natürlich bequemer....

    Gruß

  4. #4
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    Prima, Danke! Das PDF bekommt den gewünschten Namen und landet im vorgesehenen Zielordner. Dies geschieht zwar manchmal etwas verzögert, für das Ergebnis ist das aber nicht sonderlich schlimm.

    Wenn ich allerdings in die Konsole schaue, frage ich mich schon was da los ist und ob ich mir Sorgen machen muss... Alle zehn Sekunden erscheint dort die Meldung "com.apple.launchd (Name_meines_LaunchAgent) Throttling respawn: Will start in 10 seconds" - und ich denke, das sind genau die zehn Sekunden Verzögerung, die manchmal bei der Skriptausführung auftreten.

    Lässt es sich vermeiden, dass alle zehn Sekunden dieser Konsoleneintrag geschrieben wird und lässt es sich vielleicht sogar so einrichten, dass das Skript tatsächlich genau in dem Moment ausgeführt wird, in dem die Datei im Ordner landet?

  5. #5
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Upps...
    Du könntest QueueDirectories in WatchPaths ändern ... dann hättest du Ruhe.

    Das eigentliche Problem ist, dass der zu überwachende Ordner nicht völlig leer ist. Da wird noch eine unsichtbare .DS_Store Datei drinnen sein. So wird der Agent alle 10 Sekunden gestartet, ohne dass er seine Aufgabe vollenden kann...

    Um das zu fixen (und weiter mit QueueDirectories arbeiten zu können):
    Nach set x to ...
    set px to POSIX path of x

    und am Ende des Blockes (z.B. direkt vor tell app "Preview"...)
    do shell script "rm " & quoted form of (px & ".DS_Store")

    oder wenn es innerhalb eines tell Blockes steht dann
    tell me to do shell script "rm " & quoted form of (px & ".DS_Store")

    Das löscht die unsichtbare .DS_Store Datei

    Zur Verzögerung: Wenn man tröpfchenweise neue Dateien dem Ordner hinzugibt, wird sich ein kurzes delay (im längsten Fall eben 10 Sek) nicht vermeiden lassen.


    Und noch zur Info: zum sofortigen Stop des Launch Agents:
    Code:
    launchctl unload ~/Library/LaunchAgents/dein.name.der.plist

    Gruß
    Geändert von sedna (29.11.2011 um 11:34 Uhr)

  6. #6
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    Super, Danke! Hatte mir auch gedacht, dass es an der.DS-Datei liegen könnte, habe aber nun mit WatchPaths tatsächlich Ruhe. Und bei der Gelegenheit habe ich die Automatisierungen, für die ich früher mal zehn Ordner und zehn Ordneraktionen angelegt hatte, auf zwei Ordner, ein Script und einen LaunchAgent reduziert.

    Aber es ergibt sich schon wieder ein neues Problem:

    Wenn ich aus FileMaker das PDF exportiere (genauer: ich drucke es mit der Option "als PDF speichern unter"), dann bekommt es blitzschnell den gewünschten Namen, landet im richtigen Ordner - und es erscheint die Fehlermeldung: "(Dateiname.pdf) Die Datei konnte nicht geöffnet werden. Möglicherweise ist sie beschädigt oder hat ein Format, das Vorschau nicht erkennt." Die Datei ist aber völlig in Ordnung und lässt sich manuell ganz normal mit Vorschau öffnen. -> So lange Vorschau noch gar nicht gestartet ist (also beim ersten PDF-Export), kommt keine Fehlermeldung, dann ist alles i.O.!

    Mit meinen Laienkenntnissen würde ich vielleicht irgendwie was hinbekommen, dass das Script noch ein wenig wartet, Luft holt, innerlich drei Mal "ho-ho-ho" ruft und dann erst Vorschau bittet, das PDF zu öffnen. Aber gibts dafür vielleicht einen geeigneteren Weg...?

    Edit: Oh, da habe ich nicht aufgepasst, es lief noch ein vorheriger LaunchAgent. Es hakt und klemmt immer noch ein wenig und in der Konsole gibt es wieder eine Fehlermeldung ("Throttling respawn: Will start in 4 seconds" bzw. "Throttling respawn: Will start in 6 seconds"). Werde mir die Sache noch mal genauer anschauen...
    Geändert von Hifi (29.11.2011 um 14:33 Uhr)

  7. #7
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Diese Meldungen sollten jetzt aber nicht mehr in regelmäßigen Abständen erscheinen ...
    Z.B. jedoch, wenn der LaunchAgent aktiviert wird, das auszuführende Skript aber gerade läuft.

    Zum Filemaker PDF Export kann ich nichts sagen, da ich das Programm nicht nutze..

    Gruß

  8. #8
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    Hm..., habe alles noch mal beobachtet und festgestellt, dass es die folgenden vier Ergebnisse bzw. Situationen nach dem PDF-Export gibt:

    1.
    Im Finder erscheint die Fehlermeldung "Die Datei konnte nicht geöffnet werden. Möglicherweise (...)". Das PDF ist aber in Ordnung und lässt sich manuell öffnen.
    -> Tritt auf, wenn "Vorschau" bereits vor dem PDF-Export geöffnet ist und längere Zeit kein PDF exportiert wurde.

    2.
    Das exportierte PDF wird wie gewünscht verarbeitet und in "Vorschau" geöffnet.
    -> Tritt auf, wenn "Vorschau" vor dem PDF-Export noch nicht geöffnet ist und längere Zeit kein PDF exportiert wurde.

    3.
    Das exportierte PDF wird erst nach einiger Verzögerung von Ordner x zum Ordner y bewegt und in "Vorschau" geöffnet. In der Konsole erscheint in diesem Zusammenhang dann die Meldung "(...) com.apple.launchd[..] (Name_meines_LaunchAgent) Throttling respawn: Will start in (...) seconds".
    -> Tritt auf, wenn "Vorschau" bereits vor dem PDF-Export geöffnet ist und bereits kurz zuvor ein PDF exportiert wurde.

    4.
    Das exportierte PDF wird erst nach einiger Verzögerung von Ordner x zum Ordner y bewegt und in "Vorschau" geöffnet. In der Konsole erscheint in diesem Zusammenhang dann die Meldung "(...) com.apple.launchd[..] (Name_meines_LaunchAgent) Throttling respawn: Will start in (...) seconds".
    -> Tritt auf, wenn "Vorschau" vor dem PDF-Export nicht geöffnet ist, aber bereits kurz zuvor ein PDF exportiert wurde (Hier habe ich testweise nach einem PDF-Export "Vorschau" schnell beendet, um die Situation herbeizuführen.)

    Das Script sieht jetzt folgendermaßen aus:

    set x to "Pfad:zum:überwachenden:Ordner:"
    set y to "Pfad:zum:Zielordner:"

    tell application "Finder"
    set theFiles to every file of folder x
    set DateiName to the clipboard
    repeat with i in theFiles
    set m to i as alias
    set name of i to DateiName & ".pdf"
    move m to folder y
    tell application "Preview" to open m
    tell application "Preview" to activate
    end repeat
    end tell


    P.S: Wie kann ich den Code so posten, dass er farbig (wie im Skripteditor) wiedergegeben wird?

  9. #9
    Riesenboiken
    Themenstarter

    Registriert
    06.2004
    Beiträge
    290
    (Edit)

    Hm, habe im Script jetzt ein "delay 0.1" eingefügt, damit ist Situation 1 gelöst und bringt (abgesehen von der nicht wahrnehmbaren Verzögerung von 0,1 Sekunde) das gewünschte Ergebnis. Situation 2 bringt ohnehin das gewünschte Ergebnis, also weiter zu 3 und 4:

    Laut launchd.plist(5)-Manual liegt der Wert für das "ThrottleInterval" standardmäßig bei 10 Sekunden - und lässt sich offenbar ohne weiteres auf Null setzen. Damit führen dann auch Situation 3 und 4 verzögerungsfrei zum gewünschten Ergebnis.

    Geändert von Hifi (30.11.2011 um 16:49 Uhr)

  10. #10
    Luxemburger Triumph Avatar von sedna
    Registriert
    10.2008
    Beiträge
    498
    Stimmt. Den kann man verändern.
    Schön, dass es jetzt klappt

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •