osacript depuis un shell ?

Le
unbewusst.sein
depuis un script shell j'aimerais lancer un osascript, j'y parviens,
avec le bon résultat pour ce test simple, mais une floppée d'injures

le script (ruby) :
#! /opt/local/bin/ruby1.9
# encoding: utf-8

r = `/usr/bin/osascript <<END
on get_alias_original(a)
tell application "Finder"
set oa to (original item of alias a) as alias
set o to POSIX path of oa
return o
end tell
end get_alias_original
set o to get_alias_original("HD:Users:yt:Menu:Desk:Calculette")
o
END`

puts "r = #{r}"

le résultat les injures prévues :
2010-05-14 16:06:42.432 osascript[19364:903] Error loading
/Users/yt/Library/ScriptingAdditions/Default Folder X
Addition.osax/Contents/MacOS/Default Folder X Addition:
dlopen(/Users/yt/Library/ScriptingAdditions/Default Folder X
Addition.osax/Contents/MacOS/Default Folder X Addition, 262): no
suitable image found. Did find:
/Users/yt/Library/ScriptingAdditions/Default Folder X
Addition.osax/Contents/MacOS/Default Folder X Addition: no matching
architecture in universal wrapper osascript: OpenScripting.framework -
scripting addition "/Users/yt/Library/ScriptingAdditions/Default Folder
X Addition.osax" declares no loadable handlers.

à peu près la même chose pour "ScriptingAdditions/List & Record
Tools.osax" et "ScriptingAdditions/Property List Tools.osax"

mais, tout de même j'obtiens le *bon* résultat :

r = /Applications/Calculator.app/

peut on éviter les injures si oui comment ?

but, inavoué de la manip : lancer un script shell par osascript do shell
script lequel script shell une authentification, j'ai vérifié que :

set r to do shell script "mon script.zsh|rb" with administrator
privileges
r

ouvre une fenêtre d'authentification ce qui évite de mettre un password
"en dur" et puis alerte l'utilisateur.
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick Stadelmann
Le #22117081
In article (Une Bévue) wrote:

à peu près la même chose pour "ScriptingAdditions/List & Record
Tools.osax" et "ScriptingAdditions/Property List Tools.osax"



Ces OSAX ne contiennent pas de code pour ton architecture. Comme
osascript est bien écrit, ça sort sur stderr qu'il suffit de rediriger.

Tu peux aussi essayer de désactiver ces OSAX, sans les virer, au cas où
tu aurais encore des applications qui les utilisent.

Patrick
--
Patrick Stadelmann
unbewusst.sein
Le #22117161
Patrick Stadelmann

Ces OSAX ne contiennent pas de code pour ton architecture. Comme
osascript est bien écrit, ça sort sur stderr qu'il suffit de rediriger.

Tu peux aussi essayer de désactiver ces OSAX, sans les virer, au cas où
tu aurais encore des applications qui les utilisent.



Ah ! OK, j'ai déjà eu ce pb d'architecture qqpart (avec MacTypes::Alias)
où j'ai du utiliser le shebang :

#!/usr/bin/arch -i386 ruby

qui ne marche pas avec ruby1.9 installé avec MacPorts...

en tk merci bien, c'est facile à contourner...

--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
unbewusst.sein
Le #22117751
Patrick Stadelmann
Ces OSAX ne contiennent pas de code pour ton architecture. Comme
osascript est bien écrit, ça sort sur stderr qu'il suffit de rediriger.




ça roule super quand je fais :

zsh-% ./osascript_test.rb 2> /dev/null
r = /Applications/Calculator.app/

ce qui nécessite d'avoir un second script pour lancer celui-ci avec la
redirection donc, j'ai essayé plutôt POpen4 :

status = POpen4::popen4(cmd) do |stdout, stderr|
puts "stdout : #{ stdout.read.strip }"
puts "stderr : #{ stderr.read.strip }"
end

puts "exitstatus : #{ status.exitstatus }"
puts "status.stopped? : #{ status.stopped? }"
puts "status.exited? : #{ status.exited? }"
puts "status.success? : #{ status.success? }"

avec :

cmd = "ls -al"

j'obtiens bien :
zsh-% ./popen4_test.rb
stdout : total 768
drwxr-xr-x 45 yt staff 1530 14 mai 17:57 .
drwxr-xr-x 50 yt staff 1700 14 mai 14:25 ..
-rw-r--r--@ 1 yt staff 6148 4 sep 2008 .DS_Store
-rw-r--r--@ 1 yt staff 708 30 aoû 2008
ANSI_backslash_escape_sequences.txt
-rw-r--r-- 1 yt staff 2008 1 sep 2008 ANSI_colors.txt

etc...

-rwxr-xr-x@ 1 yt staff 805 1 sep 2008 tty_cbreak_ioctl.rb
-rwxr-xr-x 1 yt staff 320 28 aoû 2008 tty_icanon.rb
stderr :
exitstatus : 0
status.stopped? : false
status.exited? : true
status.success? : true
zsh-%

avec la commande :

cmd = "/usr/bin/osascript <<END
do shell script "echo toto "
END"

je me retrouve bien aussi avec :

stdout : toto


par contre, avec cette commande :

cmd = "/usr/bin/osascript <<END
on get_alias_original(a)
tell application 'Finder'
set oa to (original item of alias a) as alias
set o to POSIX path of oa
return o
end tell
end get_alias_original
set o to get_alias_original('HD:Users:yt:Menu:Desk:Calculette')
do shell script "echo " & o
END"

j'ai l'erreur sur stderr mais que dalle sur stdout pourquoi ?

remarque qu'avec :

cmd = "/usr/bin/osascript <<END
set o to "toto"
do shell script "echo " & o
END"

j'ai bien :

stdout : toto

une question de timing peut-être ?


Tu peux aussi essayer de désactiver ces OSAX, sans les virer, au cas où
tu aurais encore des applications qui les utilisent.



oui, c'est bien ça, j'ai testé en en enlevant qq'uns, donc ça signifie
qu'ils ne marchent pas ces "ScriptingAdditions"...
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
unbewusst.sein
Le #22117841
Une Bévue
tell application 'Finder'



il faut mettre des "" :

tell application "Finder"

--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Patrick Stadelmann
Le #22117831
In article (Une Bévue) wrote:

par contre, avec cette commande :

cmd = "/usr/bin/osascript <<END
on get_alias_original(a)
tell application 'Finder'
set oa to (original item of alias a) as alias
set o to POSIX path of oa
return o
end tell
end get_alias_original
set o to get_alias_original('HD:Users:yt:Menu:Desk:Calculette')
do shell script "echo " & o
END"

j'ai l'erreur sur stderr mais que dalle sur stdout pourquoi ?



Redirige plutôt stderr dans un fichier pour voir s'il n'y a pas d'autres
erreurs. Par exemple, l'emploi de ' simple pour les chaînes ne
fonctionne pas chez moi.

une question de timing peut-être ?



?

oui, c'est bien ça, j'ai testé en en enlevant qq'uns, donc ça signifie
qu'ils ne marchent pas ces "ScriptingAdditions"...



Ca dépend. S'ils sont en 32-bit par exemple, ils peuvent être utilisés
par des applications 32-bit ou lancée en 32-bit.

Patrick
--
Patrick Stadelmann
unbewusst.sein
Le #22118091
Patrick Stadelmann
Redirige plutôt stderr dans un fichier pour voir s'il n'y a pas d'autres
erreurs. Par exemple, l'emploi de ' simple pour les chaînes ne
fonctionne pas chez moi.



oui, c'était ça, damned !

je l'ai bu en virant les trucs de ScriptingAdditions, ça me cacher une
autre erreur...
--
« Quand tu lances la flèche de la vérité,
trempe la pointe dans du miel. »
(Proverbe arabe)
Publicité
Poster une réponse
Anonyme