Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sortir de mon programme

17 réponses
Avatar
fred1599
Bonjour,

Mon programme fonctionne bien, seulement lorsque je propose =E0
l'op=E9rateur de continuer ou de quitter le programme; si on choisit de
le quitter le shell ne disparait pas, je suis donc oblig=E9 de cliquer
sur la croix.

J'ai essay=E9 avec la librairie os et la librairie sys mais pas moyen de
me sortir de la.

Merci par avance

7 réponses

1 2
Avatar
jean-michel bain-cornu
Ouais je debute alors c'est vrai que la logique du "quit = False", je
la comprend pas trop

mais bon pour l'instant j'ai testé avec l'option kill et ca fonctionne
tres bien,


Sur le plan de la lisibilité et de la maintenabilité, il est préférable
d'avoir un seul point de sortie dans ton application.
C'est aussi plus élégant et donc plus satisfaisant intellectuellement.

L'option kill est tendancieuse, parce qu'elle shunte la sortie normale
de l'application tuée, et donc des nettoyages potentiels de données
temporaires, blocs mémoires, et autres validations de tampons avant
fermetures de fichiers, voire des mémorisations de paramètres modifiés,
et ce dans tous les modules et/ou bibliothèques que tu a utilisées avant
le kill. Sous linux, ce n'est pas trop grave, remarque ; l'os fait bien
le ménage tout seul.
Bref, ça fonctionne en apparence, mais ça reste une "usine à bugs"
potentielle.

A+
jm

Avatar
Bruno Desthuilliers
Jerome wrote:
jean-michel bain-cornu wrote:
Bonjour,
L'utilisateur à deux possibilités
1)Continuer le programme
2)Quitter le programme

Si il quitte le programme, je voudrais qu'il quitte la fenetre du
programme

En fait la fonction sous linux, c'est 'exit', j'aimerais la simuler
dans mon programme, afin de faire disparaitre cette fenetre

Je n'ai pas testé, mais un truc qui vient à l'esprit, c'est de faire

un os.system('kill -9 pid_du_shell')
C'est un peu crade, mais imparable.

A+
jm


os.system('kill -9 %d' % os.getppid())
ou
os.kill(9, os.getppid())
le lecteur attentif aura bien sûr corrigé en

os.kill(os.getppid(), 9)
ou même encore mieux en
os.kill(os.getppid(), signal.SIGKILL)


Alors la je ne comprend pas ou plus rien!!!

Pourquoi cela vous semble-t-il bizarre de quitter le programme et
revenir sur nunux


Tu ne "reviens" pas "sur nunux", puisque tu ne l'a jamais quitté.
Eventuellement, tu reviens dans ton shell...

Si ton programme se termine normalement *et* que te ne passes pas
l'option -i à ton interpréteur Python, celui-ci devrait se terminer tout
seul. Si ce n'est pas le cas, la solution n'est certainement pas de
flinguer le shell...

J'explique le déroulement avec plus de précision.

On va dire un programme de pourcentage

1) J'execute le programme,


C'est un programme en ligne de commande ? En mode texte (avec Curse ou
assimilé) ? avec un GUI ? Une interface Web ?

Tu le lance comment ? Dans quel environnement ?

ma fenetre s'ouvre


Quelle fenêtre ?

2)J'applique mon programme,


???

fait mumuse avec mes pourcentages

3)J'ai 2 solutions proposées par le programme, soit continuer, soit
quitter
4)Je quitte mon programme, la fenetre se ferme


Quelle fenêtre ?

et je suis de nouveau
sur mon OS


l'OS, dieu merci, tu ne l'a pas quitté.

Je ne vois pas le mal à fermer cette fenetre, et la difficulté à le
faire

Là il faut m'expliquer


Il faudrait d'abord que *tu* t'expliques. Avec un peu plus de précision
que tu ne l'a fait jusque là !-)





Avatar
fred1599
Jerome wrote:
jean-michel bain-cornu wrote:
Bonjour,
L'utilisateur à deux possibilités
1)Continuer le programme
2)Quitter le programme

Si il quitte le programme, je voudrais qu'il quitte la fenetre du
programme

En fait la fonction sous linux, c'est 'exit', j'aimerais la simuler
dans mon programme, afin de faire disparaitre cette fenetre

Je n'ai pas testé, mais un truc qui vient à l'esprit, c'est de f aire

un os.system('kill -9 pid_du_shell')
C'est un peu crade, mais imparable.

A+
jm


os.system('kill -9 %d' % os.getppid())
ou
os.kill(9, os.getppid())
le lecteur attentif aura bien sûr corrigé en

os.kill(os.getppid(), 9)
ou même encore mieux en
os.kill(os.getppid(), signal.SIGKILL)


Alors la je ne comprend pas ou plus rien!!!

Pourquoi cela vous semble-t-il bizarre de quitter le programme et
revenir sur nunux


Tu ne "reviens" pas "sur nunux", puisque tu ne l'a jamais quitté.
Eventuellement, tu reviens dans ton shell...

Si ton programme se termine normalement *et* que te ne passes pas
l'option -i à ton interpréteur Python, celui-ci devrait se terminer t out
seul. Si ce n'est pas le cas, la solution n'est certainement pas de
flinguer le shell...

J'explique le déroulement avec plus de précision.

On va dire un programme de pourcentage

1) J'execute le programme,


C'est un programme en ligne de commande ? En mode texte (avec Curse ou
assimilé) ? avec un GUI ? Une interface Web ?

Tu le lance comment ? Dans quel environnement ?

ma fenetre s'ouvre


Quelle fenêtre ?

2)J'applique mon programme,


???

fait mumuse avec mes pourcentages

3)J'ai 2 solutions proposées par le programme, soit continuer, soit
quitter
4)Je quitte mon programme, la fenetre se ferme


Quelle fenêtre ?

et je suis de nouveau
sur mon OS


l'OS, dieu merci, tu ne l'a pas quitté.

Je ne vois pas le mal à fermer cette fenetre, et la difficulté à le
faire

Là il faut m'expliquer


Il faudrait d'abord que *tu* t'expliques. Avec un peu plus de précision
que tu ne l'a fait jusque là !-)


Alors mon programme est créé en mode texte, la petite fenêtre qui
s'ouvre est la konsole et mon OS est Ubuntu.

Je lance mon programme sous linux, ouvre ma konsole et tapes python
monfichier.py

Voila, je ne sais pas si j'ai oublié quelquechose, mais bon, si c'est
le cas, ne me tue pas s'il te plait.






Avatar
Jerome
wrote:
Jerome wrote:
jean-michel bain-cornu wrote:
Bonjour,
L'utilisateur à deux possibilités
1)Continuer le programme
2)Quitter le programme

Si il quitte le programme, je voudrais qu'il quitte la fenetre du
programme

En fait la fonction sous linux, c'est 'exit', j'aimerais la simuler
dans mon programme, afin de faire disparaitre cette fenetre

Je n'ai pas testé, mais un truc qui vient à l'esprit, c'est de faire

un os.system('kill -9 pid_du_shell')
C'est un peu crade, mais imparable.

A+
jm
os.system('kill -9 %d' % os.getppid())

ou
os.kill(9, os.getppid())
le lecteur attentif aura bien sûr corrigé en

os.kill(os.getppid(), 9)
ou même encore mieux en
os.kill(os.getppid(), signal.SIGKILL)
Alors la je ne comprend pas ou plus rien!!!


Pourquoi cela vous semble-t-il bizarre de quitter le programme et
revenir sur nunux
Tu ne "reviens" pas "sur nunux", puisque tu ne l'a jamais quitté.

Eventuellement, tu reviens dans ton shell...

Si ton programme se termine normalement *et* que te ne passes pas
l'option -i à ton interpréteur Python, celui-ci devrait se terminer tout
seul. Si ce n'est pas le cas, la solution n'est certainement pas de
flinguer le shell...

J'explique le déroulement avec plus de précision.

On va dire un programme de pourcentage

1) J'execute le programme,
C'est un programme en ligne de commande ? En mode texte (avec Curse ou

assimilé) ? avec un GUI ? Une interface Web ?

Tu le lance comment ? Dans quel environnement ?

ma fenetre s'ouvre
Quelle fenêtre ?


2)J'applique mon programme,
???


fait mumuse avec mes pourcentages
3)J'ai 2 solutions proposées par le programme, soit continuer, soit
quitter
4)Je quitte mon programme, la fenetre se ferme
Quelle fenêtre ?


et je suis de nouveau
sur mon OS
l'OS, dieu merci, tu ne l'a pas quitté.


Je ne vois pas le mal à fermer cette fenetre, et la difficulté à le
faire
Là il faut m'expliquer
Il faudrait d'abord que *tu* t'expliques. Avec un peu plus de précision

que tu ne l'a fait jusque là !-)


Alors mon programme est créé en mode texte, la petite fenêtre qui
s'ouvre est la konsole et mon OS est Ubuntu.


ce n'est pas ton programme qui ouvre la console à ce que je comprends,
ce n'est donc pas à lui de la fermer j'imagine. D'autant plus que si ton
programme est en mode texte, conserver une trace ça peut servir.


Je lance mon programme sous linux, ouvre ma konsole et tapes python
monfichier.py


tu es sûr de l'ordre là ?

j'aurais dit :
- tu lances un terminal
- tu tapes python tonfichier.py
- ton programme est lancé
- ton programme s'arrête
- tu fermes le terminal


Voila, je ne sais pas si j'ai oublié quelquechose, mais bon, si c'est
le cas, ne me tue pas s'il te plait.









Avatar
Laurent Pointal
<zip>
Alors mon programme est créé en mode texte, la petite fenêtre qui
s'ouvre est la konsole et mon OS est Ubuntu.

Je lance mon programme sous linux, ouvre ma konsole et tapes python
monfichier.py

Voila, je ne sais pas si j'ai oublié quelquechose, mais bon, si c'est
le cas, ne me tue pas s'il te plait.



C'est toi qui as ouvert la console, c'est donc a-priori toi qui doit la
refermer, pas ton programme. Imagines que tu aies une autre commande à
lancer dans cette console après ton programme... tu finirais par haïr ce
truc qui referme la console que tu as ouverte toi.

Bon, comme tu es sous Linux...

Tu vérifie qu'il y a bien le shebang à la première ligne de ton script
Python:
#! /bin/env python (ou qq chose de ce genre)

Tu rend le script exécutable:
chmod +x monscript.py

Et après il te suffit de double-cliquer dessus dans Konqueror (ou
autre). Je crois qu'il n'y a même pas besoin qu'il soit en .py - à
vérfier. [à moins que les associations extension/mime prennent le pas
sur les attributs exécutables... à vérifier]

Et en ligne de commande, tu peux même l'appeler directement:
./monscript.py


A+

Laurent.

Avatar
Bruno Desthuilliers
Jerome wrote:
jean-michel bain-cornu wrote:
Bonjour,
L'utilisateur à deux possibilités
1)Continuer le programme
2)Quitter le programme

Si il quitte le programme, je voudrais qu'il quitte la fenetre du
programme

En fait la fonction sous linux, c'est 'exit', j'aimerais la simuler
dans mon programme, afin de faire disparaitre cette fenetre

Je n'ai pas testé, mais un truc qui vient à l'esprit, c'est de faire

un os.system('kill -9 pid_du_shell')
C'est un peu crade, mais imparable.

A+
jm
os.system('kill -9 %d' % os.getppid())

ou
os.kill(9, os.getppid())
le lecteur attentif aura bien sûr corrigé en

os.kill(os.getppid(), 9)
ou même encore mieux en
os.kill(os.getppid(), signal.SIGKILL)
Alors la je ne comprend pas ou plus rien!!!


Pourquoi cela vous semble-t-il bizarre de quitter le programme et
revenir sur nunux
Tu ne "reviens" pas "sur nunux", puisque tu ne l'a jamais quitté.

Eventuellement, tu reviens dans ton shell...

Si ton programme se termine normalement *et* que te ne passes pas
l'option -i à ton interpréteur Python, celui-ci devrait se terminer tout
seul. Si ce n'est pas le cas, la solution n'est certainement pas de
flinguer le shell...

J'explique le déroulement avec plus de précision.

On va dire un programme de pourcentage

1) J'execute le programme,
C'est un programme en ligne de commande ? En mode texte (avec Curse ou

assimilé) ? avec un GUI ? Une interface Web ?

Tu le lance comment ? Dans quel environnement ?

ma fenetre s'ouvre
Quelle fenêtre ?


2)J'applique mon programme,
???


fait mumuse avec mes pourcentages
3)J'ai 2 solutions proposées par le programme, soit continuer, soit
quitter
4)Je quitte mon programme, la fenetre se ferme
Quelle fenêtre ?


et je suis de nouveau
sur mon OS
l'OS, dieu merci, tu ne l'a pas quitté.


Je ne vois pas le mal à fermer cette fenetre, et la difficulté à le
faire
Là il faut m'expliquer
Il faudrait d'abord que *tu* t'expliques. Avec un peu plus de précision

que tu ne l'a fait jusque là !-)


Alors mon programme est créé en mode texte, la petite fenêtre qui
s'ouvre est la konsole et mon OS est Ubuntu.

Je lance mon programme sous linux, ouvre ma konsole et tapes python
monfichier.py


Ok, tu lances manuellement un pseudo-terminal (konsole) et depuis tu
lances une appli en ligne de commande. Pourquoi donc voudrais-tu que le
pseudo-terminal se ferme quand l'appli en ligne de commande se termine ?
Le fait que le pseudo-terminal reste actif est parfaitement normal,
c'est le comportement attendu, et c'est le comportement *souhaitable*.

Voila, je ne sais pas si j'ai oublié quelquechose,


Non, c'est parfait.

mais bon, si c'est
le cas, ne me tue pas s'il te plait.


Rhôô l'aut, hé! J'ai une tête de tueur, franchement ???







Avatar
BertrandB
Ouais je debute alors c'est vrai que la logique du "quit = False", je
la comprend pas trop

mais bon pour l'instant j'ai testé avec l'option kill et ca fonctionne
tres bien,


Sur le plan de la lisibilité et de la maintenabilité, il est préférable
d'avoir un seul point de sortie dans ton application.
C'est aussi plus élégant et donc plus satisfaisant intellectuellement.

L'option kill est tendancieuse, parce qu'elle shunte la sortie normale
de l'application tuée, et donc des nettoyages potentiels de données
temporaires, blocs mémoires, et autres validations de tampons avant
fermetures de fichiers, voire des mémorisations de paramètres modifiés,
et ce dans tous les modules et/ou bibliothèques que tu a utilisées avant
le kill. Sous linux, ce n'est pas trop grave, remarque ; l'os fait bien
le ménage tout seul.
Bref, ça fonctionne en apparence, mais ça reste une "usine à bugs"
potentielle.

A+
jm
Oui et une usine à zombies



1 2