Je l'ai exprès mis entre guillemet. C'est à prendre dans le sens des gens qui veulent faire des développements très contrôlés de partout (les contrôles de types à la compil, les contrôles d'accès aux données...éventuellement de la preuve de code). AMA pour ça il y a ADA et dans une moindre mesure Java.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
En Python le "pratique" c'est 'x' public, '_x' attention dépendant de l'implementation, '__x' privé à la classe.
Le côté "on laisse accessible" est dans l'esprit de Python, aucun pythoneur n'ira faire ça pour toutes ses données membres - ou alors c'est un adepte de ADA/Java/C++ qui essaie d'apporter l'esprit de ces langages dans Python - il faut qu'il change d'esprit ou de langage.
Les property, qui permettent de créer des accesseurs pour limiter/contrôler ce qu'on fait avec les variables membres, sont utilisées soit lorsque tu as vraiment besoin de faire des contrôles, soit quand on a du refactoring - pour ne pas casser les utilisations qui feraient des appels directs à une variable.
C'est sûr que Python n'est pas fait pour les personnes qui veulent un typage statique et des contrôles d'accès sur les attributs et méthodes. Chaque langage a ses usages, ses limites... et ses adeptes. Python n'est pas fait pour les "ingénieurs logiciels". Mais ils ont largement le choix d'autres langages.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
TOUTAFE, d'ailleurs, je préfère de loin utiliser whitespace, il n'y a rien qui dérange les yeux: le grand blanc [*], l'immensité désertique des pixels.
[*] Ou autre, ça dépend du fond de la fenêtre d'édition.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
Moins intuitif pour toi et pour moi, parce que l'on connais déjà os.popen. Prend un débutant qui se farcit les docs... choisir le bon popen/spawn.../exec... et bien l'utiliser n'est pas évident, et en plus ces fonctions ont l'ordre des valeurs de retour qui peut différer... Là, avec la doc, ils t'indiquent comment faire pour mimer l'ancien usage ainsi que (AMA plus intéressant pour les nouveaux venus) les utilisations en Pipe shell.
Et c'est plus sécure: là, tu indiques explicitement que tu vas aller utiliser le shell pour lancer la commande, donc qu'il peut y avoir une tromperie à ce niveau - tu dois en être conscient.
Ceci dit, tant que tu restes en Python 2.x, tu peux continuer avec os.popen (mon treetaggerwrapper.py l'utilise encore, et il tourne très bien avec Python 2.6).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
Là, je te suis, on aurais qq chose comme sur la doc PHP, où il peut y avoir des contributions à la suite du contenu, ça permettrais à des utilisateurs de rapporter des expériences, donner plus d'exemples.
La doc s'est (nettement) améliorée - elle est mieux structurée qu'avant - mais il y manque encore ce côté participatif/retour d'expérience.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
C'est une seule fonctionnalité: lancer un process séparé.
Après, la façon dont tu identifies le binaire, comment tu communiques avec ce process, comment tu fournis les paramètres, etc... ce ne sont que des options.
Après, tu as le communicate() pour les besoins simples (mais les plus courants), et tu peux utiliser des pipes vers stdin/stdout/stderr pour les choses plus compliquées.
Enfin, les os.spawn/exec, les popen & Co sont disponibles dans les versions 2.x de Python, ça ne change qu'à la version 3 qui est une évolution majeure du langage avec une réorganisation des librairies (et tu peux avoir la V2 et la V3 en parallèle).
Bref, pour moi c'est un journal en effet inutile à la base (comme indiqué dans le titre)... mais qui donnera peut-être des indications à certains.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
Il me semble que la gestion de la récursion terminale était dans Python stackless, peut-être est-ce dans pypy. Google sur tail recursion pypy donne des pistes.
Help on built-in function setrecursionlimit in module sys:
setrecursionlimit(...)
setrecursionlimit(n)
Set the maximum depth of the Python interpreter stack to n. This
limit prevents infinite recursion from causing an overflow of the C
stack and crashing Python. The highest possible limit is platform-
dependent.
In [1]: import sys
In [2]: sys.getrecursionlimit()
Out[2]: 1000
In [3]: sys.setrecursionlimit(10000)
In [4]: def fac(n):
...: def fac_aux(n, p):
...: if n == 1:
...: return p
...: return fac_aux(n - 1, n*p)
...: return fac_aux(n, 1)
...:
In [5]: fac(5)
Out[5]: 120
In [6]: fac(999)
Out[6]: 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L
[PS. je suis preneur de ta solution pour mettre du Python dans les commentaires linuxfr]
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
Ben tu es prévenu alors tu passes outre le warning, tu utilises directement les pipes, et c'est à toi de contrôler que les communications se passent bien, éventuellement à avoir un thread qui écrive sur le stdin du processus fils, et un autre qui lise sur son stdout pour récupérer les résultats (si tu n'as que de la lecture, un seul thread suffit).
Note que tu es dépendant de la façon dont l'autre process - ainsi que le système - gère les buffers d'entrée/sortie/pipe.
Mais ce genre de problème n'est pas lié à l'existence de subprocess. J'ai un code de 2005 (treetaggerwrapper.py) qui utilise os.popen2, et qui a besoin d'un thread séparé pour pouvoir alimenter un process externe et en même temps récupérer ce qu'il génère.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
Les deux installations cohabitent très bien, chacune dans son répertoire. Il faut juste penser à lancer python3 au lieu de python en ligne de commande.
J'aimerais bien voir la source (et la date) d'une telle recommandation.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
J'ai rencontré J.C.Baillie il y a quelques années, qui m'avait fait une présentation d'Urbi, qui m'avait fortement intéressé. Il devait alors le passer en open-source, et en même temps trouver le moyen de faire continuer son développement par une entité hors de l'ENSTA. Les deux buts ont dû sembler incompatibles ou du moins difficiles à concilier à l'époque, en tout cas le manque de code accessible avec une license claire nous avait conduit à abandonner cette option.
Mais c'était déjà très intéressant, depuis ça a dû s'améliorer, n'hésitez pas à tester. Et AMA ça devrait pouvoir aussi être utilisé pour des systèmes plus orientés automatique / domotique.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
C'est un très vieux système, super souple au niveau des infos que tu veux mettre, et c'est très pérenne pour les données. Par contre c'est méchamment long quand tu veux faire une recherche ou un tri.
[bon, c'est pas vendredi, mais c'est le WE prolongé - et ça me coupe dans les corrections!]
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: [HUMOUR] on n'est pas vendredi
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 3.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Encapsulation
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Encapsulation
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
Le côté "on laisse accessible" est dans l'esprit de Python, aucun pythoneur n'ira faire ça pour toutes ses données membres - ou alors c'est un adepte de ADA/Java/C++ qui essaie d'apporter l'esprit de ces langages dans Python - il faut qu'il change d'esprit ou de langage.
Les property, qui permettent de créer des accesseurs pour limiter/contrôler ce qu'on fait avec les variables membres, sont utilisées soit lorsque tu as vraiment besoin de faire des contrôles, soit quand on a du refactoring - pour ne pas casser les utilisations qui feraient des appels directs à une variable.
C'est sûr que Python n'est pas fait pour les personnes qui veulent un typage statique et des contrôles d'accès sur les attributs et méthodes. Chaque langage a ses usages, ses limites... et ses adeptes. Python n'est pas fait pour les "ingénieurs logiciels". Mais ils ont largement le choix d'autres langages.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: [HUMOUR] on n'est pas vendredi
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 3.
[*] Ou autre, ça dépend du fond de la fenêtre d'édition.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 3.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Ca mériterai une dépêche non?
Posté par lolop (site web personnel) . En réponse au journal Shinken, la refonte de Nagios en Python, sort en version 0.1. Évalué à 2.
[pointal@murmure ~]$ python --version
Python 2.6.4
[pointal@murmure ~]$ python3 --version
Python 3.1.1
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Enfer et damnation !
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
Et c'est plus sécure: là, tu indiques explicitement que tu vas aller utiliser le shell pour lancer la commande, donc qu'il peut y avoir une tromperie à ce niveau - tu dois en être conscient.
Ceci dit, tant que tu restes en Python 2.x, tu peux continuer avec os.popen (mon treetaggerwrapper.py l'utilise encore, et il tourne très bien avec Python 2.6).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
La doc s'est (nettement) améliorée - elle est mieux structurée qu'avant - mais il y manque encore ce côté participatif/retour d'expérience.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Enfer et damnation !
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
Après, la façon dont tu identifies le binaire, comment tu communiques avec ce process, comment tu fournis les paramètres, etc... ce ne sont que des options.
Après, tu as le communicate() pour les besoins simples (mais les plus courants), et tu peux utiliser des pipes vers stdin/stdout/stderr pour les choses plus compliquées.
Enfin, les os.spawn/exec, les popen & Co sont disponibles dans les versions 2.x de Python, ça ne change qu'à la version 3 qui est une évolution majeure du langage avec une réorganisation des librairies (et tu peux avoir la V2 et la V3 en parallèle).
Bref, pour moi c'est un journal en effet inutile à la base (comme indiqué dans le titre)... mais qui donnera peut-être des indications à certains.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 3.
En cherchant un peu sur tail recursion python, on trouve pourquoi ça ne sera pas de façon standard dans le langage:
http://neopythonic.blogspot.com/2009/04/tail-recursion-elimi(...)
Et diverses solutions plus ou moins bonne pour le faire quand même:
http://paulbutler.org/archives/tail-recursion-in-python/
http://www.teamrubber.com/blog/python-tail-optimisation-usin(...)
http://fiber-space.de/wordpress/?p=349
Bon, si tu en as absolument besoin... ben tu ne feras pas de Python.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 2.
(bon, après c'est éventuellement de la gestion de récursion terminale)
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 5.
setrecursionlimit(...)
setrecursionlimit(n)
Set the maximum depth of the Python interpreter stack to n. This
limit prevents infinite recursion from causing an overflow of the C
stack and crashing Python. The highest possible limit is platform-
dependent.
In [1]: import sys
In [2]: sys.getrecursionlimit()
Out[2]: 1000
In [3]: sys.setrecursionlimit(10000)
In [4]: def fac(n):
...: def fac_aux(n, p):
...: if n == 1:
...: return p
...: return fac_aux(n - 1, n*p)
...: return fac_aux(n, 1)
...:
In [5]: fac(5)
Out[5]: 120
In [6]: fac(999)
Out[6]: 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L
[PS. je suis preneur de ta solution pour mettre du Python dans les commentaires linuxfr]
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par lolop (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à 3.
Note que tu es dépendant de la façon dont l'autre process - ainsi que le système - gère les buffers d'entrée/sortie/pipe.
Mais ce genre de problème n'est pas lié à l'existence de subprocess. J'ai un code de 2005 (treetaggerwrapper.py) qui utilise os.popen2, et qui a besoin d'un thread séparé pour pouvoir alimenter un process externe et en même temps récupérer ce qu'il génère.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Nouveautés
Posté par lolop (site web personnel) . En réponse à la dépêche Fedora 13 « Goddard », parée au décollage. Évalué à 2.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Nouveautés
Posté par lolop (site web personnel) . En réponse à la dépêche Fedora 13 « Goddard », parée au décollage. Évalué à 2.
Les deux installations cohabitent très bien, chacune dans son répertoire. Il faut juste penser à lancer python3 au lieu de python en ligne de commande.
J'aimerais bien voir la source (et la date) d'une telle recommandation.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Nouveautés
Posté par lolop (site web personnel) . En réponse à la dépêche Fedora 13 « Goddard », parée au décollage. Évalué à 3.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Premiere impression à chaud
Posté par lolop (site web personnel) . En réponse à la dépêche Fedora 13 « Goddard », parée au décollage. Évalué à 7.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
# Dommage...
Posté par lolop (site web personnel) . En réponse à la dépêche Passage d'Urbi en Open source. Évalué à 5.
J'ai rencontré J.C.Baillie il y a quelques années, qui m'avait fait une présentation d'Urbi, qui m'avait fortement intéressé. Il devait alors le passer en open-source, et en même temps trouver le moyen de faire continuer son développement par une entité hors de l'ENSTA. Les deux buts ont dû sembler incompatibles ou du moins difficiles à concilier à l'époque, en tout cas le manque de code accessible avec une license claire nous avait conduit à abandonner cette option.
Mais c'était déjà très intéressant, depuis ça a dû s'améliorer, n'hésitez pas à tester. Et AMA ça devrait pouvoir aussi être utilisé pour des systèmes plus orientés automatique / domotique.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
# Bristol
Posté par lolop (site web personnel) . En réponse au journal brain backup. Évalué à 3.
[bon, c'est pas vendredi, mais c'est le WE prolongé - et ça me coupe dans les corrections!]
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Encore un probleme pour l'affichage..
Posté par lolop (site web personnel) . En réponse à la dépêche Nouvelle version 2.6.34 du noyau Linux. Évalué à 9.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Les migrations
Posté par lolop (site web personnel) . En réponse au journal Sap achète Sybase.. Évalué à 3.
http://www.sauvonsluniversite.com/spip.php?article3682
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Les migrations
Posté par lolop (site web personnel) . En réponse au journal Sap achète Sybase.. Évalué à 3.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
# La première victime d'Hadopi
Posté par lolop (site web personnel) . En réponse au journal Avec Free t'es (parfois) pris pour un con ?. Évalué à 5.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Copies d'écran ?
Posté par lolop (site web personnel) . En réponse à la dépêche Sortie de Clementine 0.3, le successeur de Amarok 1.4. Évalué à 2.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN