Aller au contenu

[résolu]problème Python


nofun

Messages recommandés

hello,

je viens d'installer une petite barre des tâches (panel) sympa : pypanel. Le fichier de conf utilise Python que je ne connais pas (c'est l'occasion de découvrir).

Une partie de ce fichier (voir ci-dessous) configure l'action quand on clique sur l'horloge. Par défaut ça lance XClock.

if button == 1:
   os.system("xclock &")
elif button == 2:
	pass
elif button == 3:
	pp.toggleHidden()
elif button == 4:
	pp.showDesktop()
elif button == 5:
	pp.showDesktop()

Je l'ai modifié pour que ça lance Mozilla Calendar : ça c'est facile, il suffit de remplacer xclock par mozilla -calendar. Le problème c'est que si Mozilla est déjà lancé il va demander l'ouverture de session sous un autre utilisateur, et ça c'est pas très net (c'est une machine que je prépare pour quelqu'un, autant que ça soit propre). Malheureusement la fonction -remote de Mozilla ne permet pas de lancer Calendar (elle permet de demander à une instance déjà ouverte l'ouverture de mailnews par exemple).

Donc c'est là que ça se complique pour moi : il me faut introduire une condition selon si Mozilla est déjà ouvert ou non. J'ai trouvé sur le net de quoi injecter l'état de Mozilla (os.popen et cmd.read) et ça marche : mon test print testmoz renvoit les bonnes valeurs 0 si en marche, 1 si fermé.

#--------------------------------
def clockButtonEvent(pp, button):
#--------------------------------
""" Button event handler for the panel's clock object """

if button == 1:
	cmd = os.popen("if mozilla -remote 'ping()'; then echo 0; else echo 1; fi")
	testmoz = cmd.read()
	print testmoz #test
	if testmoz == 0:
		print testmoz #test
		os.system("xclock &")
	else:
		print testmoz #test
		os.system("mozilla -calendar &")
elif button == 2:
	pass
elif button == 3:
	pp.toggleHidden()
elif button == 4:
	pp.showDesktop()
elif button == 5:
	pp.showDesktop()

Alors là je me dis cool c'est réglé. Et bien pas du tout : si Mozilla est fermé 'testmoz' a pour valeur 1 et mozilla -calendar est lancé, jusqu'à là logique. Mais si Mozilla est ouvert 'testmoz' a bien pour valeur 0, mais c'est toujours Mozilla qui est lancé ! Comme si la première condition n'était pas prise en compte :eeek:

(les boutons 2, 3, 4, et 5 fonctionnent normalement)

Alors bien sûr j'ai fait un test :

if button == 1:
	valeurtest = 0 #ou 1
	if valeurtest == 0 :
		print "la valeur est egale a 0"
	else:
		print "la valeur n'est pas egale a 0"

et ce test de conditions fonctionne ! Donc je suis devant un mystère puisque je ne vois pas de différence entre les deux scripts. Puisse la force d'INpact me rendre la sérénité en même temps qu'elle apportera une réponse à mon humble question :p , merci à vous.

Lien vers le commentaire
Partager sur d’autres sites

Je pense savoir d'où vient l'erreur : le retour de cmd.read() est certainement une chaine de caractère et non un nombre (contrairement à ton test).

D'où :

"0" != 0

Essaye donc :

if testmoz == "0":

Problême tout bète et pas du tout "mystérieux". Python fonctionne très bien :transpi: .

J'espère que ça pourra t'aider.

Lien vers le commentaire
Partager sur d’autres sites

merci beaucoup pour ta réponse.

Malheureusement j'avais déjà essayé cette solution, j'ai même essayé en mettant echo "0" dans la ligne shell.

Le mystère reste entier... :zarb:

(mais je me suis jamais permis de prétendre que Python ne fonctionnait pas bien :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...