Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 24.03.2009 - 23:25 Titel: "do shell script" mit Variable im Pfad |
|
|
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 |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 25.03.2009 - 01:34 Titel: Re: "do shell script" mit Variable im Pfad |
|
|
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
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 |
|
 |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 25.03.2009 - 09:22 Titel: Re: "do shell script" mit Variable im Pfad |
|
|
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 |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 25.03.2009 - 19:36 Titel: |
|
|
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 |
|
 |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 25.03.2009 - 19:51 Titel: |
|
|
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.  |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 25.03.2009 - 20:51 Titel: |
|
|
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 |
|
 |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 25.03.2009 - 22:13 Titel: |
|
|
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!  |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 25.03.2009 - 22:49 Titel: |
|
|
set pathString to (path to resource "dumpXmp") as text
do shell script "cd " & quoted form of POSIX path of pathString & "; ./dumpXmp" |
|
Nach oben |
|
 |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 25.03.2009 - 23:15 Titel: |
|
|
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!"
Der Pfad stimmt aber... |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 25.03.2009 - 23:50 Titel: |
|
|
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 |
|
 |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 26.03.2009 - 21:36 Titel: |
|
|
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 |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 26.03.2009 - 21:59 Titel: |
|
|
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 |
|
 |
steelinc •->

Anmeldedatum: 02.01.2009 Beiträge: 11
|
Verfasst am: 26.03.2009 - 22:48 Titel: |
|
|
ok, sorry jetzt steh ich echt total auf dem Schlauch und peil nix mehr...
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!  |
|
Nach oben |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 26.03.2009 - 23:36 Titel: |
|
|
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 |
|
 |
iScript •---->


Anmeldedatum: 29.03.2001 Beiträge: 1116
|
Verfasst am: 26.03.2009 - 23:42 Titel: |
|
|
das hat vor allem den vorteil, dass es funktioniert, egal wo das package liegt, da der pfad dynamisch ist. ich dachte, darum ging es
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 |
|
 |
|