équivalent sous python d'un "read -n 2 monchoix" sous bash?

Le
Jean-Pierre
Bonjour à tous,

alors je vous mets tout de suite au parfum: je ne suis pas du tout
programmeur, je suis un un simple utilisateur qui a découvert linux puis le
bash et j'adore me pondre (de façon assez laborieuse) des scripts pour me
faciliter la vie informatique.

Cependant il a ses limites (en fait les miennes surtout) quand il faut
commencer à manipuler des chaînes. En outre je suis un fana des matrices car
je trouve ça terriblement pratique à l'utilisation.

Dans ce but j'aimerais me mettre au python mais avant même de commencer j'ai
besoin de savoir s'il existe ce que j'ai mis en sujet (donc en interface
graphique) car j'adore me faire des programmes aux saisies les plus courtes
et donc, à priori, les plus simples possibles!

Pour ceux, éventuellement, qui ne savent pas à quoi correspond cette
commande elle demande de taper une saisie "formatée" au clavier : dans mon
exemple je tape 2 caractères et sitôt la fin du 2ième caractère elle est
enregistrée dans la variable monchoix. Donc pas d'entrée à taper et ça
j'adore et surtout ça correspond à la grande majorité des saisies que je
fais pour mes besoins personnels.

D'avance merci pour vos lumières!
Jean-Pierre.

__________________________________________________________
Ah l'informatique!
Ou pourquoi faire simple quand on peut faire compliqué!
__________________________________________________________
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
Damien Wyart
Le #24467351
* Jean-Pierre
Dans ce but j'aimerais me mettre au python mais avant même de
commencer j'ai besoin de savoir s'il existe ce que j'ai mis en sujet
(donc en interface graphique) car j'adore me faire des programmes aux
saisies les plus courtes et donc, à priori, les plus simples
possibles!



Si vous lisez l'Anglais, il y a différentes suggestions sur les pages
suivantes :

http://love-python.blogspot.fr/2010/03/getch-in-python-get-single-character.html

http://effbot.org/pyfaq/how-do-i-get-a-single-keypress-at-a-time.htm

http://code.activestate.com/recipes/134892/

En résumé, sous Linux, on peut utiliser soit curses, soit les modules
liés à la gestion du terminal.

--
DW
Jean-Pierre
Le #24467831
Damien Wyart wrote:

* Jean-Pierre
Dans ce but j'aimerais me mettre au python mais avant même de
commencer j'ai besoin de savoir s'il existe ce que j'ai mis en sujet
(donc en interface graphique) car j'adore me faire des programmes aux
saisies les plus courtes et donc, à priori, les plus simples
possibles!



Si vous lisez l'Anglais, il y a différentes suggestions sur les pages
suivantes :

http://love-python.blogspot.fr/2010/03/getch-in-python-get-single-


character.html

http://effbot.org/pyfaq/how-do-i-get-a-single-keypress-at-a-time.htm

http://code.activestate.com/recipes/134892/

En résumé, sous Linux, on peut utiliser soit curses, soit les modules
liés à la gestion du terminal.




Merci d'avoir répondu mais au vu des exemples cela me paraît
particulièrement compliqué pour faire la même chose qu'une minuscule ligne.
Donc, à mes yeux et au-delà de l'aspect professionnel, c'est un langage
compliqué qui illustre bien ma signature...

Je vais aller voir du côté du perl et si ça ne va pas je me contenterai du
bash et de curses donc....


__________________________________________________________
Ah l'informatique!
Ou pourquoi faire simple quand on peut faire compliqué!...
__________________________________________________________
Damien Wyart
Le #24467961
* Jean-Pierre
Merci d'avoir répondu mais au vu des exemples cela me paraît
particulièrement compliqué pour faire la même chose qu'une minuscule
ligne.



Attention aux jugements hâtifs... Sur ce point, effectivement, c'est un
peu complexe mais ça ne veut pas dire qu'en Python, tout est complexe !
C'est même le contraire et la syntaxe est particulièrement claire et
agréable !

Un tout petit exemple pour illustrer (afficher des lignes où se trouve
une chaîne donnée) :

myfile = open("fich.txt", "r")
for line in myfile:
if "pattern" in line:
print line

Dans un terminal, par défaut, une saisie n'est considérée terminée
qu'après un appui sur Entrée ; il est donc normal que pour ne pas avoir
cela, il faille un peu de complexité : sauvegarde des réglages du
terminal, modification puis restauration. En Python, tout est explicite,
donc c'est parfois plus verbeux, mais on sait ce que l'on fait... Le
shell propose un "raccourci", éventuellement pratique, mais ce besoin
est sans doute nettement moins fréquent en Python (qui est très général)
qu'en Shell.

Donc, à mes yeux et au-delà de l'aspect professionnel, c'est un
langage compliqué qui illustre bien ma signature...



Détrompez-vous ! Cela serait dommage que vous restiez sur cette
impression. Si vous voulez aborder Python de façon plus structurée mais
très progressive, je vous conseille les ouvrages suivants,
téléchargeables en ligne :

http://inforef.be/swi/python.htm

Je vais aller voir du côté du perl et si ça ne va pas je me contenterai du
bash et de curses donc....



En Perl, cela sera plus ou moins le même problème de départ (le terminal
attend Entrée pour terminer une saisie) :

http://perldoc.perl.org/perlfaq5.html#How-can-I-read-a-single-character-from-a-file%3f--From-the-keyboard%3f
http://search.cpan.org/~jstowe/TermReadKey-2.30/ReadKey.pm

Le module ReadKey encapsule un peu les choses, mais je dirais que c'est
similaire à Python avec le module curses...

Chacun ses goûts, mais je pense que c'est dommage de se priver de Python
(ou de Perl) sur une fausse impression ; la syntaxe du Shell est quand
même souvent contraignante et pas toujours agréable...

--
DW
Thomas NOEL
Le #24477731
On 11 mai, 09:01, Jean-Pierre
Damien Wyart wrote:
> * Jean-Pierre >> Dans ce but j'aimerais me mettre au python mais avant même de
>> commencer j'ai besoin de savoir s'il existe ce que j'ai mis en sujet
>> (donc en interface graphique) car j'adore me faire des programmes aux
>> saisies les plus courtes et donc, à priori, les plus simples
>> possibles!

> Si vous lisez l'Anglais, il y a différentes suggestions sur les pages
> suivantes :

>http://love-python.blogspot.fr/2010/03/getch-in-python-get-single-
character.html

>http://effbot.org/pyfaq/how-do-i-get-a-single-keypress-at-a-time.htm

>http://code.activestate.com/recipes/134892/

> En résumé, sous Linux, on peut utiliser soit curses, soit les modul es
> liés à la gestion du terminal.

Merci d'avoir répondu mais au vu des exemples cela me paraît
particulièrement compliqué pour faire la même chose qu'une minuscul e ligne.



m = numpy.mat([[1,2],[3,4]])
print m.I

La dernière ligne, assez minuscule, inverse une matrice. Je vous
laisse
traduire l'exercice en shell script ;)

Blague à part, vous ne parlez pas de langage ici, vous parlez des
"bibliothèques" ou "outils" qui sont fournis avec. Ainsi, Unix dispose
d'outils standards géniaux permettant de gérer très facilement des
aspects Unix de base (grep, cut, sed, awk... et donc aussi "read" qui
prend bien en charge les terminaux)

Python n'est pas un langage dédié à Unix ou aux systèmes basés su r des
terminaux : il ne dispose pas de fonctions simples pour faire ce que
peuvent faire les outils Unix. En revanche, Python propose de façon
native quelques bonnes tonnes de design patterns. Et moi c'est pour ça
que je l'aime bien dans les bidules que je dois programmer.

Ce qui ne m'empêche pas de programmer en bash, awk ou sed quand c'est
mieux adapté.

Zou,
--
Thomas
Laurent Pointal
Le #24477271
Jean-Pierre wrote:

Damien Wyart wrote:

* Jean-Pierre
Dans ce but j'aimerais me mettre au python mais avant même de
commencer j'ai besoin de savoir s'il existe ce que j'ai mis en sujet
(donc en interface graphique) car j'adore me faire des programmes aux
saisies les plus courtes et donc, à priori, les plus simples
possibles!



Si vous lisez l'Anglais, il y a différentes suggestions sur les pages
suivantes :

http://love-python.blogspot.fr/2010/03/getch-in-python-get-single-


character.html

http://effbot.org/pyfaq/how-do-i-get-a-single-keypress-at-a-time.htm

http://code.activestate.com/recipes/134892/

En résumé, sous Linux, on peut utiliser soit curses, soit les modules
liés à la gestion du terminal.




Merci d'avoir répondu mais au vu des exemples cela me paraît
particulièrement compliqué pour faire la même chose qu'une minuscule
ligne. Donc, à mes yeux et au-delà de l'aspect professionnel, c'est un
langage compliqué qui illustre bien ma signature...



Non, vous confondez le langage et la présence de librairies pour une
fonctionnalités X ou Y.

Dans ce cas précis, malgré la richesse des modules standards ou externes de
Python, il n'y a pas un "read" tout fait correspondant à vos besoins. C'est
simplement parce que - même si elle est d'un usage courant pour vous - c'est
une opération que l'on fait rarement (on préfère généralement avoir une
saisie validée par entrée, pour pouvoir relire, contrôler et modifier si
besoin avant de valider).

Si cette commande n'existait pas et qu'il vous fallait l'écrire pour le
shell, en supportant les différents types de terminaux, je ne suis pas sûr
que cela soit trivial, et ça serait sûrement bien plus long qu'une
"minuscule ligne".
Le module curses (et sa fonction getch()) devraient vous permettre d'écrire
rapidement l'équivalent (et l'aide est dispo sur ce newsgroup ainsi que sur
les différentes listes de discussion sur python - ex. )

Je vais aller voir du côté du perl et si ça ne va pas je me contenterai du
bash et de curses donc....



Dommage. A moins que quelqu'un n'ait eu exactement le même besoin que vous
et ait packagé sa réalisation dans le CPAN, il est probable que vous aurez
le même genre de retour.

Si je peux me permettre un conseil, ne vous arrêtez pas là dessus, ça serait
dommage.

A+
L.Pointal.


--
Laurent POINTAL -
3 allée des Orangers - 91940 Les Ulis - France
Tél. 01 69 29 06 59
yves
Le #24478041
Le Fri, 11 May 2012 09:01:31 +0200, Jean-Pierre a écrit:

Bonjour,

Merci d'avoir répondu mais au vu des exemples cela me paraît
particulièrement compliqué pour faire la même chose qu'une minuscule
ligne.



Oui, les exemples donnés en lien font peur.

En voici un autre qui n'évite pas le ENTER, mais qui au moins n'est pas
trop terrifiant:

######
:~$ cat exemple.py
import sys

maVariable = sys.stdin.read(2)
print maVariable*4 + " bof"

:~$ python exemple.py
aa
aaaaaaaa bof

######

--
Yves
yves
Le #24478061
Le Tue, 15 May 2012 00:03:08 +0000, yves a écrit:

En voici un autre qui n'évite pas le ENTER, mais qui au moins n'est pas
trop terrifiant:



S'il ne s'agit que d'éviter le ENTER à la saisie, on peut même tricher:

:~$ read -n 2 monEntree; echo $monEntree|python exemple.py
yyyyyyyyyy bof


Il y a peut-être mieux, mais vous saisissez l'idée.

--
Yves
Publicité
Poster une réponse
Anonyme