Ergebnis 1 bis 7 von 7
  1. #1
    Galloway Pepping
    Themenstarter
    Avatar von VisioNOIR
    Registriert
    08.2009
    Ort
    Klingenstadt
    Beiträge
    1.354

    AppleScript soll ein Terminal-Script unsichtbar ausführen

    Hallo, öhm, ich meine *Weihnachtsmannbart ankleb* Ho Ho Ho zusammen!

    (für alle, die das "Vorgeplänkel" überspringen möchten, runterscrollen bis zum Marker)

    Folgende Ist-Situation:

    * Mac Mini (OS 10.6.8) vorhanden
    * dieser agiert primär als heimischer Media-Server
    * zum Musikhören läuft der Logitech Media Server 7.7.0 als Zuspieler für meine Logitech Squeezeboxen auf dem Mini
    * da der Mini eh im Wohnzimmer steht, wird dieser mit der Software SqueezeSlave (welche sich mehr oder weniger wie eine Hardware-Squeezebox verhält) zum Versorgen der angeschlossenen HiFi-Anlage betraut


    So weit, so gut, läuft wie erwartet.

    Zum Steuern der Musik benutze ich, je nach Situation, entweder die Logitech Media Server-Weboberfläche oder die App iPeng auf diversen iTouch-Geräten. Jetzt nenne ich auch eine Logitech Harmony (Universalfernbedienung) mein Eigen. Nun hatte ich die illustre Idee, mit jener Infrarot-Ferbedienung zumindest die rudimentären Abspielfunktionen (lauter, leiser, nächstes Lied, vorheriges Lied) zu steuern. Nichts leichter als das, dachte ich mir, Candelair und Remote Buddy installiert und eigene Behaviours programmiert. Funktioniert im Grunde auch ganz gut, nur mit einem kosmetischen Makel (und jetzt folgt auch die eigentliche Frage):


    ------------- MARKER ---------------

    Meine Remote Buddy-Behaviours bestehen aus AppleScript-Schnippseln, welche via Telnet CLI-Strings an die Logitech-Software schicken. Diese funktionieren, nur öffnet sich immer ein Terminal-Fenster sichtbar auf dem Desktop, wenn die Behaviour-Aktion getriggert wird. Diese "visuelle Rückmeldung" würde ich gerne vermeiden.

    Der Quelltext sieht ähnlich wie folgt aus:
    Code:
    set telnet to "telnet 127.0.0.1 9090
    00%3A00%3A00%3A00%3A00%3A01 playlist index +1
    exit"
    tell application "Terminal"
    	run
    	do script telnet
    	delay 0.2
    	close
    	quit
    end tell
    Jegliche Versuche mit
    Code:
    set visible to false
    das Terminal-Fenster nach dem Starten des Terminals zu verstecken als auch das Terminal über ein Mutter-Prozess direkt unsichtbar zu starten
    Code:
    tell application "System Events" to run application "Terminal" without visible
    führen dazu, dass die Telnet-Verbindung garnicht erst aufgebaut wird, der CLI-String erreicht also die Server-Software garnicht.

    Wie kriege ich das Problem am geschicktesten gelöst?


    Thanx in advance & Merry X-Mas
    Michael
    Geändert von VisioNOIR (24.12.2011 um 00:10 Uhr)

  2. #2
    Charlamowsky Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    12.955
    Sieh dir doch einfach mal den AS-Befehl "do shell script..." an.
    (Das mit /bin/sh ausgeführte Skript wird zwischen Gänsefüsschen gestellt, darin enthaltene Gänsefüsschen und Backslashes müssen mit einem weiteren Backslash maskiert werden.)
    Beispüle hier.

  3. #3
    Galloway Pepping
    Themenstarter
    Avatar von VisioNOIR
    Registriert
    08.2009
    Ort
    Klingenstadt
    Beiträge
    1.354
    Super Tipp! Danke dafür!

    Der Quelltext sieht jetzt ähnlich wie folgt aus und funktioniert wunderbar
    Code:
    set telnet to "(sleep 0.2; echo 00%3A00%3A00%3A00%3A00%3A01 playlist index +1; echo exit) | telnet 127.0.0.1 9090"
    
    do shell script telnet

  4. #4
    Charlamowsky Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    12.955
    Mit dem "sleep 0.2" solltest du nicht arbeiten. Der Dezimalpunkt ist Locale-abhängig und kann (Environment-bedingt) zu Syntaxfehlern führen. Benutze lieber nur Ganzzahlen, soviel Zeit dürftest du übrig haben.

  5. #5
    Galloway Pepping
    Themenstarter
    Avatar von VisioNOIR
    Registriert
    08.2009
    Ort
    Klingenstadt
    Beiträge
    1.354
    Oh je, mal schaun, ob ich die 0,8 Sekunden erübrigen kann...

    Ich behalte es im Hinterkopf. Momentan streite ich mich ein wenig mit den Behaviours von Remote Buddy, da mit der selben Fernbedienung sowohl eyeTV als auch Plex (und die erwähnte SqueezeSlave) gesteuert werden sollen. Noch möchte das nicht so wie ich es gerne hätte...

  6. #6
    Auralia Avatar von Bomberzocker
    Registriert
    06.2008
    Ort
    NRW
    Beiträge
    200
    Zitat Zitat von Rastafari Beitrag anzeigen
    Mit dem "sleep 0.2" solltest du nicht arbeiten. Der Dezimalpunkt ist Locale-abhängig und kann (Environment-bedingt) zu Syntaxfehlern führen. Benutze lieber nur Ganzzahlen, soviel Zeit dürftest du übrig haben.
    und wenn man eine fünftel Sekunde haben möchte? Muss man dann "sleep 1/5" schreiben?
    Mac Mini 2.26 GHz Intel Core 2 Duo, 10.7.3 / Windows 7
    iPod Touch 4G

  7. #7
    Charlamowsky Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    12.955
    Nein. Nur die diversen Locales im Skript eindeutig definieren. zB so:
    Code:
    LC_ALL=C sleep 0.3;

Berechtigungen

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