1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Variable an Terminal übergeben

Dieses Thema im Forum "AppleScript" wurde erstellt von Ansa42, 19.06.07.

  1. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Mahlzeit,

    vorweg: ich setze mich gerade zum ersten Mal mit AS auseinander, entschuldigt meine "Unwissenheit". Den Teil "leere den Papierkorb" überspringe ich jetzt mal ganz frech.

    Der Plan ist folgender: Ich benutze häufig einen Online-Videorekorder. Die aufgezeichneten Files müssen nach dem Herunterladen dekodiert werden, dafür gibt es ein Tool, welches über das Terminal gesteuert wird.

    Ich will jetzt einen Ordner basteln, an den ich ein AS anhänge, damit ich die heruntergeladenen FIles nur dort hineinverschiebe und der Rest soll von allein gehen (will z.B. nicht jedes Mal In- und Outputpfade, Benutzer und kennwort eintragen müssen).

    Grundsätzlich komme ich halbwegs zurecht, habe aber zwei Fragen dazu:
    1. Kann ich den Dateinamen der Datei, die ich in den Ordner kopiere, abfragen und an eine Variable übergeben? Wenn ja, wie? Im Moment muß ich diesen Teil noch manuell in einen Dialog eintragen (geht ja, aber automatisch wäre es schöner).

    2. Am Ende meines Skriptes kommt jetzt der fertige String für das Dekodieren des Videofiles heraus (heißt momentan "verkettung").
    "do shell script "verkettung"" funktioniert leider nicht - wie kriege ich den String ins Terminal? (http://developer.apple.com/technotes/tn2002/tn2065.html#TNTAG3 hat mir nicht so recht geholfen, oder ich bin zu blind)

    Danke für jeden Hinweis!

    EDIT: Punkt 2 hat sich erledigt, es muß wohl "tell application "Terminal" to do script verkettung" heißen.
     
    #1 Ansa42, 19.06.07
    Zuletzt bearbeitet: 19.06.07
  2. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Rechte Maustase im ScriptEditor -> Folder Action Scripts -> Adding

    ergibt
    Code:
    on adding folder items to this_folder after receiving these_items
    	-- insert actions here
    end adding folder items to
    "these_items" ist eine Liste der hinzugefügten Dateien. Im AppleScript Forum habe ich letztens das Gerüst für einen rekursiven Handler gepostet, den Du auch hier verwenden kannst.

    Weil "Verkettung" kein Befehl ist. Zumindest keiner, der im Pfad liegt. Du müßtest wissen (wenn "verkettung" ein Kommando ist) wo es liegt und dann mit »do shell script "/pfad/verkettun"« aufrufen. Versuch mal als Pfad (wilde Vermutung) "./" zu nehmen.
     
  3. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Danke soweit.
    Nach mehreren erfolglosen Versuchen habe ich festgestellt, daß ich überhaupt keine Ordneraktion zum Fliegen kriege :-c, selbst

    Code:
    on adding folder items to this_folder after receiving these_items
    	display dialog "Hallo!"
    end adding folder items to
    klappt nicht.

    Was mache ich bloß falsch?

    P.S.: Wenn ich per rechter Maustaste den Folder Action Handler (on adding...) einsetzen will bekomme ich immer die Fehlermeldung "Beim Ausführen des Skriptes ist ein Fehler aufgetreten", deshalb muß ich den Handler manuell eintragen. Ist mein AS evtl. kaputt?
     
  4. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Was da los ist, kann ich auch nicht sagen. Ferndiagnose ist etwas schwierig. Das AS selbst defekt ist glaube ich eher nicht.

    Bekommst Du denn irgendwas zum Fliegen? Ich meine: Du kannst ja im Prinzip auch ein Droplet schreiben. Die empfangenen Datein dropst Du dann darauf. Sie werden verarbeitet und das Ergebnis landet (z.B.) auf dem Desktop.

    Versuch das doch zuerst mal.
     
  5. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    habe gerade mal eine Standard-Folder-Action getestet (Alarm bei neuen Dateien - hat geklappt).

    Mal sehen, werde das Alarmskript mal schrittweise anpassen und sehen, wo mein Fehler liegt.
     
  6. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Das Problem war der Speicherort! Ich dachte, es ist egal, wo eine angehängte Aktion für einen Ordner liegt, sie muß aber zwingend in Lib/Scripts/Folder Actions liegen.
     
  7. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Okay. Dann viel Erfolg!
     
  8. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Eine Frage habe ich noch:

    Mein Ordner übergibt mir den Dateinamen "as text" jetzt in eine Variable, allerdings in Form von
    Code:
    HDD:Users:philip:Desktop:OTR-Dekoder:Dateiname_des_Files.mpg
    , also den kompletten Pfad mit Doppelpunkten.

    Ich benötige aber nur den Dateinamen. Ich sehe jetzt zwei Möglichkeiten, weiß aber nicht, wie ich sie realisiere:

    1. Möglichkeit (die ich auch interessanter weil universeller finde): Kann man bestimmte Zeichen(-ketten) innerhalb einer Variablen durch etwas anderes (hier: nichts) ersetzen? Wie macht man das?

    2. Möglichkeit: Der Inhalt der Variablen wird bis zum x. Buchstaben/Zeichen gelöscht (z.B. alles nach dem 30. Zeichen weiterverwenden - den Rest davor löschen).

    Wie gesagt, es ist mein erster AS-Tag - vielleicht fehlt mir noch die richtige "Denke".
     
  9. Hobbes_

    Hobbes_ Gast

    Das geht ganz einfach. Siehe folgendes Beispiel-Script:

    Code:
    set txt to "HDD:Users:philip:Desktop:OTR-Dekoder:Dateiname_des_Files.mpg"
    
    -- code
    set my text item delimiters to ":"
    set itemized_txt to every text item of txt
    set filename to last item of itemized_txt
    set my text item delimiters to ""
    -- end of code
    
    display dialog filename
    
     
  10. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Das geht noch einfacher.

    Ich nehme an, Du hast da stehen:
    Code:
    set variable to irgendwas as text.
    Mach daraus mal
    Code:
    set variable to name of (info for irgendwas)
     
  11. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Das klappt gut, habe ich erstmal eingebaut, danke.


    Im Moment sieht das ganze so aus:

    Code:
    on adding folder items to this_folder after receiving added_items
    	try
    		set Pfad to (added_items as text)
    		set my text item delimiters to ":"
    		set itemized_txt to every text item of Pfad
    		set Dateiname to last item of itemized_txt
    		set my text item delimiters to ""
    		set Var1 to "/Applications/OTR/otrdecoder -i /Users/philip/Desktop/OTR-Dekoder/"
    		set Var3 to " -o /Users/philip/Movies/Aufnahmen/ -e <Mailadresse> -p <Passwort>"
    		set verkettung to Var1 & Dateiname & Var3
    		tell application "Terminal" to do script verkettung
    		display dialog "Die dekodierte Datei wird im Verzeichnis 'Aufnahmen' erstellt. Die Anwendung 'Terminal' darf erst beendet werden, wenn die Datei vollständig dekodiert wurde." buttons {"Fertig - Terminal beenden"} default button 1
    		tell application "Terminal" to quit
    	end try
    end adding folder items to
    Darf ich noch mehr fragen? Allmählich fängt es an, Spaß zu machen.

    1. Wie kommt man auf solche Dinge wie "item delimiters"? Wo kann man sowas lesen? Fischer-Bayern? Allein hätte ich das nie gefunden.

    2. Ich habe einen Button eingebaut, der nach abgeschlossener Dekodierung das Terminal schließt. Kann man irgendwie abfragen, ob das File im Zielordner fertig ist bzw. ob der Dekoder noch arbeitet (Idle Zustand?), damit das Schließen automatisch passiert?

    3. Wenn alles fertig ist, soll das ursprüngliche File im Ordner "OTR-Dekoder" noch in den Papierkorb, aber das kriege ich hoffentlich selbst hin, trotzdem nehme ich natürlich gern Tips an.

    4. Unter
    Code:
    set variable to name of (info for irgendwas)
    kann ich mir noch nicht so recht was vorstellen :-c

    5. Was macht eigentlich diese "Try"-Anweisung?

    6. Vielen Dank für Eure Mühe und Geduld!
     
  12. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Mit "set Pfad to (added_items as text)" konvertierst Du schon alles nach Text. Das ist ungeschickt. Da ich mich aber jetzt um meinen Sohn kümmern muß, melde ich mich nach Mittag nochmal.
     
  13. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Das hört sich gut an, danke.
     
  14. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Ich habe das mal - zum Ausprobieren - als run handler geschrieben. Du kannst es also direkt im Scripteditor testen und Dir alle Schritte ansehen.

    Es stehen ganz viele "return" Kommandos drin. Die mußt Du nach und nach weglöschen. Sie sollen Dir nur zeigen, was in jedem Schritt passiert.

    Also: Starte und wähle mal mehrere Dateien aus.

    Dann bekommst Du vom ersten "return" im Ergbnisfenster des Scripteditors angezeigt, was applescript durch die Wahl erhält. Das ist dasselbe, wie ein droplet oder ein folder action Handler erhält.

    Wenn Du das gehehen hast, löscht Du die erste return Zeile und startest wieder. Du siehst dann, was an "info for" so ein gewähltes Element vorhanden ist. Lösche das return wieder usw. usf.

    Code:
    property otrdecoder : "/Applications/OTR/otrdecoder"
    property output : (POSIX path of (path to "cusr")) & "Movies/Aufnahmen/"
    property mail : "me@some.where"
    property spasswort : "geh heim"
    
    on run
    	set added_items to choose file with multiple selections allowed
    	return -- hier siehst Du, was alles im Script ankommt
    	repeat with one_item in added_items
    		set information to info for one_item
    		return information -- hier, siehst Du alle Informationen über das erste der Files
    		if not folder of information and name extension of information is "mov" then
    			return Dateiname
    			-- Allerdings brauchst Du den Namen doch gar nicht. Du hast doch den Pfad!
    			return POSIX path of one_item
    			set Command to otrdecoder & ¬
    				" -i " & (quoted form of (POSIX path of one_item)) & ¬
    				" -o " & (quoted form of output) & ¬
    				" -e " & (quoted form of mail) & ¬
    				" -p " & (quoted form of spasswort)
    			return Command -- hier kannst Du das command begutachten
    			do shell script Command
    		end if
    	end repeat
    end run
    P.S. »name extension of information is "mov"« mußt Du natürlich noch anpassen, da "mov" bestimmt nicht die richtige extension ist.
     
  15. Ansa42

    Ansa42 Starking

    Dabei seit:
    20.03.07
    Beiträge:
    220
    Hui, das sieht in der Tat eleganter aus, als das, was ich gebastelt habe.

    Ich werde mal versuchen, das soweit zu verstehen und aufzusaugen. Vielen Dank!
     

Diese Seite empfehlen