[GastForen Programmierung/Entwicklung AppleScript Script soll Speicherung einer ps-Datei abwarten

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Script soll Speicherung einer ps-Datei abwarten

Goar
Beiträge gesamt: 395

19. Jun 2003, 14:48
Beitrag # 1 von 9
Bewertung:
(2305 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Forum,

bei der Umgehung des Fehler -48 habe ich inzwischen zwei Varianten gefunden, die vermutlich funktionieren würden.

v1: das Erzeugen der ps-Datei aus XPress wird durch ein QuicKey angestoßen. Dabei wird die ps-Datei schon mit korrektem Namen ausgegeben, aber in den XP-Ordner statt in den ps-Ordner gesichert. Also muss die Datei als nächstes dorthin verschoben werden.
v2: nachdem mit einem QuicKey ein ps-Drucker (ist so konfiguriert, dass er nur ps-Dateien erzeugt) als Standarddrucker eingerichtet wurde, erzeugt AS mit dem print-Befehl (statt mit 'print PostScript file xyz') eine ps-Datei, die als "Ohne Titel.ps" auf dem Schreibtisch landet. Hier fällt eine Umbenennung und Verschiebung in den richtigen Ordner an.

Das Umbenennen/Verschieben klappt auch wunderbar, wenn es isoliert mit einem Dummy.ps ausgeführt wird (ich teste oft Einzelschritte, wobei ich die anzutreffenden Bedingungen manuell herstelle).

Schön und gut, in der Praxis wird dann das ps berechnet und das AS-Script macht mit seinen Umbenennen/Verschieben-Aktionen schon weiter, bevor die ps-Datei überhaupt im Finder erschienen ist. Wie kann ich jetzt dem Script mitteilen, dass es gefälligst warten soll, bis diese ps-Datei da ist?

Mit Time-Out habe ich herumprobiert, vermute aber, dass (v1) das durch QuicKeys ausgelöste ps-Rechnen keine Veranlassung sieht, ausgerechnet an AS eine "Fertig"-Meldung abzugeben, und dass (v2) ein Print-Vorgang sowieso keine solche Rückmeldung abgibt, da AS einen Papier-Ausdruck in der Regel nicht scripten kann und vermutlich nicht mitbekommen hat, dass es auf einen ps-Drucker gedruckt hat.

Wenn es die Möglichkeit gäbe, das Script eine bestimmte Zeit anzuhalten, so wäre das vielleicht hilfreich; eine Überwachung, im Abstand von 3 bis 5 sec ginge vielleicht auch. Allerdings geht da bei zig Dateien so oder so einiges an Zeit verloren.

Wenn für einen Lösungsansatz weitere Infos oder Scriptteile erforderlich sind, bitte ich um entsprechende Meldung

Gruß, Goar
X

Script soll Speicherung einer ps-Datei abwarten

Hans Haesler
  
Beiträge gesamt: 5826

4. Jul 2003, 14:44
Beitrag # 2 von 9
Beitrag ID: #418204
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

versuche es mal mit dem folgenden Handler (er stammt aus einem Script-Menü-Script von XPress 5):
---
(* Hier wird der Ablauf verzögert, damit die Dateien gespeichert werden können *)
on FileExists(FilePath)
  tell application "Finder"
    set go to false
    repeat until go is true
      if exists alias FilePath then set go to true
    end repeat
  end tell
end FileExists
---

Hans Haesler, hsa@ringier.ch


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Goar
Beiträge gesamt: 395

4. Aug 2003, 09:45
Beitrag # 3 von 9
Beitrag ID: #418205
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

den Inhalt der von Dir vorgeschlagenen Finder-Anweisung habe ich in eine in meinem Skript bereits vorhandene Finder-Anweisung eingesetzt und angepasst. Das Eventprotokoll zeigt dann auch endlose Abfragen, ob das alias existiert.

Ich befürchtete aber gleich, dass XPress vor lauter AS-Kontrollen keine oder kaum Gelegenheit findet, sein ps zu Ende zu rechnen. Ohne die Abfrage dauerte das Rechnen bei diesem Beispiel einige Sekunden. Mit der Abfrage hatte ich aber bald den Eindruck, dass da nichts mehr kommen würde. Nach Abbruch des Skripts (Apfel-.) erschien die ps-Datei dann nach wenigen Sekunden. War ich zu ungeduldig?

Gibt es nicht eine Möglichkeit, in Abständen von 3 bis 5 sec (wie oben angedacht) abzufragen, damit das rechnende Programm (könnte ja auch mal ein anderes sein) auch seine Chance bekommt? Wenn ich mich recht erinnere, ist z.B. der Distiller ein Programm, das äußerst zickig auf jedwede Störung reagiert.

Gruß, Goar


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Hans Haesler
  
Beiträge gesamt: 5826

4. Aug 2003, 11:43
Beitrag # 4 von 9
Beitrag ID: #418206
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

und was geschieht, wenn Du das Eventprotokoll ausblendest? Beim normalen Ausführen eines Scripts sollte dieses Fenster nicht geöffnet sein. Der Ablauf wird stark gebremst (siehe auch Thema "Wissenswertes über das Eventprotokoll").

In Deiner ersten Meldung sagst Du, dass Du mit Time-Out herumprobiert hast. Ohne Erfolg, weil dieser Befehl einzig dazu dient, den Vorgabewert von einer Minute zu verlängern, damit keine Fehlermeldung angezeigt wird, wenn ein Programm für eine Aktion länger braucht (oder damit der Anwender mehr Zeit hat, einen Dialog auszufüllen oder eine Datei zu lokalisieren).

Eine andere Möglichkeit, um den Ablauf eines Scripts zu verzögern, ohne dass anderen Programmen Rechenleistung wegenommen wird ist der Einsatz von 'delay'. Dessen Wert funktioniert nur mit Ganzzahlen. Deshalb ist die kleinste "Pause", welche eingelegt werden kann, eine Sekunde:
---
on FileExists(FilePath)
  repeat
    try
      delay 1
      FilePath as alias
      exit repeat
    end try
  end repeat
end FileExists
---
Versuche es mal mit dieser Version. Dieser Handler benötigt den Finder nicht. Er enthält eine Repeat-Schleife mit einer 'try'-Schleife. Die Verzögerung ist auf eine Sekunde gestellt. Dann wird getestet, ob der Dateipfad existiert. Falls nicht (die Datei ist nicht bereit) ergibt dies einen Fehler und nichts geschieht. Nach einer Skunde wird nochmals nachgeschaut. Und so fort. Sobald aber die Datei existiert, wird die Schleife mit 'exit repeat' verlassen und der Ablauf des Scripts geht an der Stelle weiter, wo der Aufruf des Handlers steht.

Der Aufruf 'FileExists(FilePath)' muss zwischen dem Befehl zum Schreiben der PS-Datei und dem Verschieben dieser stehen.

Meine Erfahrung mit dem Distiller: man sollte nicht manuell fertige Dateien aus dem Out-Ordner entfernen, solange er noch mit einer weiteren Datei beschäftigt ist.

Hans Haesler, hsa@ringier.ch


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Goar
Beiträge gesamt: 395

4. Aug 2003, 20:05
Beitrag # 5 von 9
Beitrag ID: #418207
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das traf den Nagel auf den Kopf. Auf Bruchteile von Sekunden kommt es dabei nicht an.

Gewöhnungsbedürftig fand ich die Minimalsyntax nach 'delay', aber das geht mit anderen Befehlen vermutlich entsprechend.

Das war übrigens die letzte Klippe in meinem XPress2pdf-Skript – falls im harten Produktionsalltag nichts Neues dazu kommt.

Ach ja, das Eventprotokoll hatte ich beim Testen auch mal geschlossen, konnte aber keinen Unterschied feststellen. Deinen Hinweis zum Eventprotokoll hatte ich also noch im Kopf.

Gruß, Goar


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Goar
Beiträge gesamt: 395

7. Aug 2003, 16:30
Beitrag # 6 von 9
Beitrag ID: #418208
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

nachdem ich mit den Handlern …
---
[code:1]on psRechnen() -- erforderliche Variable sind global definiert
 tell application "QuarkXPress 4.11"
  open xpFile
  tell document 1 -- of application "QuarkXPress 4.11"
   ...
   print
   my psRename()
   close
  end tell
 end tell
end psRechnen

on psRename() -- erforderliche Variable sind global definiert
 -- Warten auf ps-Datei
 set ohneTitelPfad to "Macintosh HD:Desktop Folder:Ohne Titel.ps"
 repeat
  try
   delay 1
   ohneTitelPfad as alias
   exit repeat
  end try
 end repeat
 -- ps-Datei wird korrekt benannt und verschoben
 tell application "Finder"
  if exists file "Ohne Titel.ps" of desktop then
   set name of file "Ohne Titel.ps" of desktop to psName
   move file psName of desktop to folder ordPS
  else
   display dialog "is nich da" buttons {"Abbruch"} default button 1 -- *
   error number -128
  end if
 end tell
end psRename
[/code:1]
---
einige Testdateien erfolgreich bearbeitet hatte, trat bei einem umfangreicheren Test (je vier Dateien in zwei Ordnern) doch wieder der Dialog (*) auf, was für mich bedeutete, dass die repeat-Schleife mit 'delay' so noch nicht das gewünschte Resultat brachte.

Den zweiten Handler habe ich daraufhin mit Mitteln umgebaut, die mir geläufiger waren. Damit hat dann auch der o.g. umfangreichere Test geklappt:
---

[code:1]-- ps-Datei wird umbenannt
on psRename()
 set ohneTitelPfad to "Macintosh HD:Desktop Folder:" as alias
 tell application "Finder"
  set Warten to 0
  repeat
   if exists file "Ohne Titel.ps" of ohneTitelPfad then -- ••
    set name of file "Ohne Titel.ps" of ohneTitelPfad to psName
    move file psName of ohneTitelPfad to folder ordPS
    exit repeat
   else
    delay 1
    set Warten to Warten + 1
    if (Warten mod 15 = 0) then
     display dialog "is nich da" buttons {"Abbruch", "Weiter"} default button 2
     if button returned is "Abbruch" then error number -128
    end if
   end if
  end repeat
 end tell
end psRename
[/code:1]---

Kannst Du Dir einen Reim darauf machen, warum die erste Version nicht klappte?
Gehts eleganter als die zweite Version, oder ist die in Anbetracht der Umstände akzeptabel?
Fragen über Fragen.

Wer ihn kennt, der freut sich schon auf die Antwort.

Gruß, Goar


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Hans Haesler
  
Beiträge gesamt: 5826

7. Aug 2003, 17:24
Beitrag # 7 von 9
Beitrag ID: #418209
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

Du freust Dich zu früh. Weil ich diese Probleme nicht habe, kann ich auch keine besseren Ratschläge geben
(ich würde nach wie vor die Datei schon beim Schreiben mit dem richtigen Namen benennen).
Aber vielleicht sollte ich mal versuchen, eine umfangreichere Datei zu generieren...

Dennoch: Hauptsache ist, dass das Script jetzt läuft. Und wenn den Finder dabei mitmacht, ohne den Ablauf
zu verzögern, umso besser.

Hans Haesler, hsa@ringier.ch


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Goar
Beiträge gesamt: 395

12. Aug 2003, 09:57
Beitrag # 8 von 9
Beitrag ID: #418210
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Du erwähntest, der Finder sei bekanntermaßen etwas langsam, daher ja der Vorschlag mit 'delay' die Existenz einer Datei abzuwarten, ohne dabei den Finder zu behelligen.

Könnte es sein, dass eine Datei zwar schon als bereit erkannt wird, der Finder aber noch eine Weile braucht, um das zu bemerken, z.B. weil das Icon noch nicht da ist?

Gruß, Goar


als Antwort auf: [#418203]

Script soll Speicherung einer ps-Datei abwarten

Hans Haesler
  
Beiträge gesamt: 5826

12. Aug 2003, 12:21
Beitrag # 9 von 9
Beitrag ID: #418211
Bewertung:
(2304 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

ja, ungefähr so ist es. Dem Finder kann man aber "Beine machen" durch...
Code
tell application "Finder" to update 

... oder auch:
Code
tell application "Finder" to update container window of the desktop 

Ich habe allerdings das Gefühl, dass man mit dem ersten Befehl genau dasselbe erreicht, wie mit dem zweiten.
Zudem sollte man testen, ob dies in einer Repeat-Schleife eine Beschleunigung ergibt oder das Gegenteil...

Eine andere Möglichkeit: den 'busy status' (= 'Beschäftigungs-Zustand') von 'info for' abfragen. Dazu wird
der Finder nicht gebraucht, weil diese Anfrage an die Standard Additions geht. Dieser 'busy status' ist 'true'
solange in die Datei hineingeschrieben wird. Er wechselt auf 'false' sobald die Datei komplett ist.

Ich habe dies noch nie ausprobiert, aber verschiedentlich gelesen, dass sie Sache nicht so zuverlässig sei...
---
on psRename()
  delay 1
  set psDatei to "Macintosh HD:Desktop Folder:Ohne Titel.ps" as alias
  set Warten to 0
  repeat
    if busy status of (info for file psDatei) is false then
      tell application "Finder" to set name of file psDatei to psName
      tell application "Finder" to move file psDatei to folder ordPS
      exit repeat
    else
      delay 1
      set Warten to Warten + 1
      if (Warten mod 15 = 0) then
        display dialog "is nich da" buttons {"Abbruch", "Weiter"} default button 2
        if button returned is "Abbruch" then error number -128
      end if
    end if
  end repeat
end psRename
---
Dieses Script habe ich nur zum Teil getestet. Das Umbenennen und das Verschieben einer Dummy-Datei funktionieren.
Den grossen Rest – mit einer Datei, welche live geschrieben wird – überlasse ich Dir...

Hans Haesler, hsa@ringier.ch


als Antwort auf: [#418203]
X