Aller au contenu


Photo

lancer une application avec paramètres


  • Please log in to reply
7 replies to this topic

#1 ycarry

ycarry

    Membre

  • Membres
  • Pip
  • 93 Messages :

Posté 19 janvier 2009 - 18:17

Salut!
Mon problème est simple : je veux qu'une appli RB lance une autre appli avec un paramètre, genre :
f.launch param,true
mais sur Mac, on ne peut pas passer de paramètres avec la méthode launch

Si je passe par un shell
s.execute chemin_appli+param
ça fonctionne mais le shell est alors fils de l'appli RB qui attend 'suspendue' la fin du shell -soit un Quit de l'appli lancée par le shell, ce que je veux éviter.

Y'a-t-il une solution pour un shell 'externe' ou un passage de paramètre ?

#2 kronos

kronos

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 873 Messages :
  • Configuration:PowerPC G5 - 2x2GHz - 4G RAM - OS 10.5.7
    MBP Core Duo 2GHz - 2G RAM - OS 10.5.8
  • Sexe:Masculin
  • Localisation:Gex

Posté 19 janvier 2009 - 18:59

En unix (donc avec Mac OS aussi), faire suivre une commande du signe "&" lance la commande en tâche de fond et rends la main immédiatement la main au processus père sans attendre la fin du processus fils.
Je ne sais pas si cela va marcher avec real basic. Mais cela ne te coûte rien d'essayer. :)

#3 ycarry

ycarry

    Membre

  • Membres
  • Pip
  • 93 Messages :

Posté 19 janvier 2009 - 19:19

Merci.
Oui, j'ai testé ça, sans résultat; RB attend.
J'ai même essayé des appels à un applescript externe (do script "un_sh_écrit_à_la_volée_dans_mon_app"),
mais sans résultat non plus.
Dans la version PC et Linux, ça marche bien (launch param), mais la version Mac coince. :unsure:

#4 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 991 Messages :
  • Configuration:Mac Mini Core i7 2019 - 16Go - 2x1To SSD
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 19 janvier 2009 - 19:46

Fait un Shell en mode Asynchrone (mode 1). Comme ça, RB n'attendra pas :)

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#5 ycarry

ycarry

    Membre

  • Membres
  • Pip
  • 93 Messages :

Posté 19 janvier 2009 - 20:28

Merci.
Oui, c'est vrai RB n'attend pas : le shell lance l'appli et se ferme et donc l'appli appelée aussi :whistling:

#6 kronos

kronos

    Macfr addict

  • Membres
  • PipPipPipPipPip
  • 873 Messages :
  • Configuration:PowerPC G5 - 2x2GHz - 4G RAM - OS 10.5.7
    MBP Core Duo 2GHz - 2G RAM - OS 10.5.8
  • Sexe:Masculin
  • Localisation:Gex

Posté 19 janvier 2009 - 21:40

Autre solution au niveau unix:
ecrire un script qui fait un nohup* et un "&" de ta commande.

Comme cela, ta commande est détachée et ton script rend la main immédiatement.


(*) faire man nohup pour plus de détail.

#7 ycarry

ycarry

    Membre

  • Membres
  • Pip
  • 93 Messages :

Posté 20 janvier 2009 - 16:02

J'avais essayé le 'nohup' mais le shell reste fils. J'ai essayé plein de script bash, sh,…, imbriqués, … hélas.

Mais j'ai trouvé une solution très Mac au point où j'en étais :wink2:
Je créé à la volée donc où je veux :
- un fichier applescript lançant un shell externe lançant l'appli avec paramètre.
- une application externe en compilant directement ledit fichier applescript (que j'efface)
application que je peux -enfin !- appeler avec 'launch', voire effacer quand l'appli RB quitte.

C'est de l'unix mac simple avec osacompile et du RB pur porc :
Ici, les options d'osacompile (qui peut compiler autre chose que de l'applescript…) sont
-d : met le contenu dans la data fork
-o : change le nom
-x : compile en executable

Sub Lanceur(shellPathToSecondApp as folderitem, param as string)
dim f as folderitem =SpecialFolder.Temporary.Child("myName.app")
//test si app. déjà créée si non :
if not f.Exists then
	dim h, g as folderitem
	dim t as TextOutputStream
	dim s as new Shell
	dim p as string
	//crée un folderitem pour le fichier temp
	h=SpecialFolder.Temporary.Child("myName")
	//créé un autre pour le cd du shell interne
	g=SpecialFolder.Temporary
	//prépare mon appel shell externe
	p=shellPathToSecondApp+param
	//échappement spécial pour applescript
	//les espaces '\ ' doivent être '\\ '
	p=replaceall(p,"\","\\")

	t=h.CreateTextFile
	//entête applescript du fichier temp
	t.WriteLine "#!/usr/bin/osascript"
	//appel shell externe du fichier temp
	t.Write "do shell script ("+chr(34)+p+chr(34)+")"
	t.close

	//le shell interne va dans dossier parent du fichier (sinon l'osa. compile à la racine)
	//et compile un éxécutable AppleScript avec le fichier temp
	s.Execute "cd "+g.shellpath+"; osacompile -d -o myName.app -x "+h.shellPath

end if
//lance le script compilé qui lance l'appli avec paramètre ! :^p
f.Launch

Ça marche nickel, c'est rapide et sans intervention du User… :up:

Edit: Allez hop, je fais tout dans les Temporary, invisible et auto-nettoyant, voir le nouveau code

Ce message a été modifié par ycarry - 20 janvier 2009 - 21:36 .


#8 patyom

patyom

    Grand(e) bavard(e)

  • Membres
  • PipPipPip
  • 372 Messages :
  • Sexe:Masculin
  • Localisation:Livernon (Lot)

Posté 06 décembre 2019 - 11:47

Le post n'est pas très récent mais j'ai absolument besoin de comprendre comment faire ce shell pour lancer ma deuxième appli.

 

Je m'y pers un peu, beaucoup même.

 

j'essaie de comprendre le code et de l'appliquer mais un problème intervient.

y-à-t'il quelqu'un qui pourrait me guider sur ce code ou un autre d'ailleurs.

 

 

Merci


Ce message a été modifié par patyom - 06 décembre 2019 - 11:47 .

MacBook Pro - 13" - 6Go - 1 To
Emac 1GHz - 640 MB - 40 Go





1 utilisateur(s) en train de lire ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)