Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

"do shell script" mit Variable im Pfad
Gehe zu Seite 1, 2  Weiter
 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 24.03.2009 - 23:25    Titel: "do shell script" mit Variable im Pfad Antworten mit Zitat

Hallo,
Ich arbeite derzeit mit Photoshop Skript, bearbeite allerdings die Xmp Metadaten über das Xmp Sdk via C++. Nun öffnet sich leider, wenn ich aus dem Ps-Script die C++ Funktionen aufrufe ein Terminal welches sich blöder weise nicht selber schließt.

Nun habe ich ein "do shell script" Applescript gebaut welches auch genau so funktioniert wie ich es haben will!
Code:

do shell script "cd /Applications/Adobe\\ Photoshop\\ CS3/Xmp/Mac; ./dumpXmp"

Jetzt müsste ich aber ein paar Dinge erweitern und hoffe hier auf Hilfe...

Eigentlich stehe ich nur vor einem großen Problem, die Pfadangabe zu meiner ausführbaren C++ Datei müsste variabel sein. Hier mal ein Beispiel wie ich aus einem ps-script das File aufrufe:
Code:

var xmp= new File(psPath + "/Xmp/Mac/dumpXmp");
xmp.execute();

Wie man sieht habe ich immer die psPath Variable mit im Pfad. Das bedeutet aber leider dass ich das Applescript zur Laufzeit generieren muss. Das beinhält 2 Probleme mit denen ich nicht klar komme...
Code:

var psPath = getPath();
var scpt = new File( $.getenv("HOME") + "/xmpStuff.scpt");
  scpt.open("w");
  scpt.writeln("do shell script \"cd /Xmp/Mac/ ./pushXmp\"");
  scpt.close();
  scpt.execute();

Dies wäre der Code wie ich das Applescript zur Laufzeit generieren kann, wie bekomme ich da jetzt die psPath Variable mit in den Pfad hinein? Das zweite Problem ist, dass ich das Applescript als Programm-Bundle mit Endung ".app" speichern müsste inklusive der "Nur ausführbar" Option.

Hat da jemand Ahnung wie das funktionieren könnte, oder vielleicht sogar nen ganz andern Lösungsansatz?

Vielen Dank für die Hilfe im Voraus
steelinc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 25.03.2009 - 01:34    Titel: Re: "do shell script" mit Variable im Pfad Antworten mit Zitat

puh, ziemlich heftig ... und von hinten durch die brust...
steelinc hat Folgendes geschrieben:
... wie das funktionieren könnte, oder vielleicht sogar nen ganz andern Lösungsansatz?

... ja, vielleicht, wenn man genau wüsste was das ziel ist und was insgesamt abgehen soll. warum meinst du denn, das applescript kompilieren zu müssen und als app-package? um es ausführen zu können? vielleicht bietet sich auch eine möglichkeit per osascript aus der shell, allerdings wäre ein do shell script dort etwas paradox Wink
es gibt doch auch shell-tools zum modifizieren der XMP-Daten. was ist die rolle von PS in dem ganzen spiel? die möglichkeit, scripts auszuführen?

und was ist eigentlich hieraus geworden?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 25.03.2009 - 09:22    Titel: Re: "do shell script" mit Variable im Pfad Antworten mit Zitat

iScript hat Folgendes geschrieben:

... ja, vielleicht, wenn man genau wüsste was das ziel ist und was insgesamt abgehen soll.

Insgesamt dreht es sich hier um verschiedene automatisierte Anwendungen in Photoshop für Atelier und Restaurationszwecke. Das ganze besteht schon seit längerem und die Bearbeitung findet mittels Ps-Script statt.

Das Xmp SDK wird mit C++ verwendet, weil mich das unabhängig von der Photoshop Version macht. Shell-Tools verwende ich nicht da auch an unterschiedlichen Windows Versionen gearbeitet wird.

Das ganze läuft ja eigentlich auch, bis auf die blöde Situation dass sich eben bei Aufruf der C++ Funktionen zusätzlich ein Terminal öffnet und sich nicht mehr schließt sondern mit der Nachricht "Prozess beendet" offen bleibt.

iScript hat Folgendes geschrieben:

und was ist eigentlich hieraus geworden?

Da war die Lösung für mein Problem relativ simpel. Mir ging es ja um einen "Quit" Event der offentsichtlich mit PS-Script und Notifiern nicht zu verwirklichen war. Ich habe daraufhin ne Java App drum herum gebaut, welche nach Photoshop Quit die nötigen Schritte ausführt.
Code:

try {
  Runtime.getRuntime().exec(new String[]{"open","-W", command}).waitFor();
} catch (IOException e) {
 e.printStackTrace();
}


Danke für die Hilfe
steelinc
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 25.03.2009 - 19:36    Titel: Antworten mit Zitat

wenn ich das recht verstehe, ist das xmp sdk manuell hinzugefügt und du hast es mit ins photoshop-bundle gelegt.
wie wäre es denn, wenn du das applescript als package speicherst und dorthinein das sdk für xmp?
das applescript kann ja den pfad zu sich selbst ermitteln bzw. nutzen.
u.U. könntest du ja auch das as-bundle dann wiederum mit ins photoshop bundle legen.
Zitat:
Shell-Tools verwende ich nicht da auch an unterschiedlichen Windows Versionen gearbeitet wird.

dort wird der "do shell script"-aufruf dann ja aber auch nicht funktionieren!?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 25.03.2009 - 19:51    Titel: Antworten mit Zitat

iScript hat Folgendes geschrieben:

das applescript kann ja den pfad zu sich selbst ermitteln bzw. nutzen.

ah ok, das könnte funktionieren. Wie kann das applescript den pfad zu sich selbst ermitteln?
iScript hat Folgendes geschrieben:

Zitat:
Shell-Tools verwende ich nicht da auch an unterschiedlichen Windows Versionen gearbeitet wird.

dort wird der "do shell script"-aufruf dann ja aber auch nicht funktionieren!?


ja, klar nicht. Aber der C++ Code ist für die OS-Versionen so ziemlich der gleiche. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 25.03.2009 - 20:51    Titel: Antworten mit Zitat

steelinc hat Folgendes geschrieben:
ah ok, das könnte funktionieren. Wie kann das applescript den pfad zu sich selbst ermitteln?

path to me <- (funktioniert unter tiger aber nicht im scripteditor, nur wenn das script als app gespeichert u. gestartet wird. unter leo geht's auch im SE, soweit ich weiss)
du kannst dir (zumindest unter leo) auch pfade zu resource-ordnern zurückgeben lassen.
Beispiel:
display dialog (path to resource "Scripts") as text
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 25.03.2009 - 22:13    Titel: Antworten mit Zitat

iScript hat Folgendes geschrieben:

Beispiel:
display dialog (path to resource "Scripts") as text


ok, soweit so gut. Jetzt habe ich in einer Variablen den richtigen Pfad. Das ist ja schonmal super! Wie kann ich die Pfadvariable jetzt in do shell script hineinpacken?

Code:

set pathString to (path to resource "dumpXmp") as text
do shell script "cd pathString; ./dumpXmp"


so gehts leider nicht! Confused
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 25.03.2009 - 22:49    Titel: Antworten mit Zitat

set pathString to (path to resource "dumpXmp") as text
do shell script "cd " & quoted form of POSIX path of pathString & "; ./dumpXmp"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 25.03.2009 - 23:15    Titel: Antworten mit Zitat

iScript hat Folgendes geschrieben:
set pathString to (path to resource "dumpXmp") as text
do shell script "cd " & quoted form of POSIX path of pathString & "; ./dumpXmp"


Da bekomm ich leider die Nachricht: "... is no directory!" Sad
Der Pfad stimmt aber...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 25.03.2009 - 23:50    Titel: Antworten mit Zitat

ja, du musst ein verzeichnis in /deine.app/Contents/Resources/deinPfad/ anlegen und darin dein sdk ablegen.
hast du das? oder besteht dein sdk aus nur aus einer datei und heisst "dumpXmp"?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 26.03.2009 - 21:36    Titel: Antworten mit Zitat

iScript hat Folgendes geschrieben:
ja, du musst ein verzeichnis in /deine.app/Contents/Resources/deinPfad/ anlegen und darin dein sdk ablegen.
hast du das? oder besteht dein sdk aus nur aus einer datei und heisst "dumpXmp"?


ja is nur die eine Datei. Ist ein Executable File...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 26.03.2009 - 21:59    Titel: Antworten mit Zitat

ja, dann also z.b. den ordner sdk zu deinen resources hinzufügen:
deine.app/Contents/Resources/sdk/ und dorthinein dann das dumpXmp legen. zugriff dann so:

do shell script "cd " & quoted form of POSIX path of (path to resource "sdk") & "; ./dumpXmp"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
steelinc
•->
•->


Anmeldedatum: 02.01.2009
Beiträge: 11

BeitragVerfasst am: 26.03.2009 - 22:48    Titel: Antworten mit Zitat

ok, sorry jetzt steh ich echt total auf dem Schlauch und peil nix mehr... Sad
Wenn ich einfach ganz normal den Pfad angebe gehts, also ohne Variable im Pfad. Warum muss ich dann die Resource - Dateien mit hineinlegen wenn ich den Pfad mit Variable angebe?

Code:

do shell script "cd /Applications/Adobe\\ Photoshop\\ CS3/Xmp/Mac; ./dumpXmp"


Das hier geht! Question
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 26.03.2009 - 23:36    Titel: Antworten mit Zitat

steelinc hat Folgendes geschrieben:
(...) Warum muss ich dann die Resource - Dateien mit hineinlegen wenn ich den Pfad mit Variable angebe? (...)

musst du ja nicht. war ja nur eine idee. "path to resource ..." kann halt nur auf einen ordner zeigen.
die ursprüngliche idee war ja aber einfach, dass das applescript den pfad zu sich selbst ermittelt. das kannst du mit "path to me" erreichen.
die "path to resource"-funktion steigt eben tiefer in das package hinab in den ordner .../deine.app/Contents/Resources/ResName/...
Im Prinzip musst du einfach nur den Pfad zu deinem Ziel in einem String in POSIX-Format zusammenbringen, um es in deinem do-shell-script verwenden zu können.
Meine Idee war einfach nur, das sdk als resource mit in das Applescript-Package zu legen um mit der "path to resource"-Funktion darauf zuzugreifen. Das ist natürlich kein Muss.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
iScript
•---->
•---->


Anmeldedatum: 29.03.2001
Beiträge: 1116

BeitragVerfasst am: 26.03.2009 - 23:42    Titel: Antworten mit Zitat

das hat vor allem den vorteil, dass es funktioniert, egal wo das package liegt, da der pfad dynamisch ist. ich dachte, darum ging es Embarassed

nur nochmal zur verdeutlichung (als programm-bundle speichern):

display dialog ¬
   "   • path to resource \"Scripts\":

" & (path to resource "Scripts") & "
   
   • path to me:

" & (path to me) & "
   
   • posix path of (path to resource \"Scripts\"):

" & POSIX path of (path to resource "Scripts") & "
   
   • posix path of (path to me):

" & POSIX path of (path to me)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum Alle Zeiten sind GMT + 2 Stunden
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter