Schrift
[thread]5910[/thread]

schleifensteuerung: while-schleife per tastatur stoppen

Leser: 1


<< >> 9 Einträge, 1 Seite
achso
 2003-11-16 15:18
#71890 #71890
User since
2003-09-03
8 Artikel
BenutzerIn
[default_avatar]
Hallo,

für ein kleines Zeitmess-Programm, dass inerhalb einer while-Schleife die Sekunden hochzählt, suche ich eine Möglichkeit die laufende Schleife von Aussen, durch drücken einer Taste, zu beeinflussen.
Anstatt das Programm mit "Strg - C" zu killen, möchte ich es gerne, so wie bei manchen Terminal-Programmen, durch drücken von "Q" o.ä. beenden.

...

if($input =~ /q/i)
{
exit;
}
else
{
while($input ne 'q')
{
$t++;
print "$t Sek.\n";
sleep(1),
}
}

...

Kann mir jemand einen Tipp geben wie es möglich ist, dass das Programm während des Schleifendurchlaufes auf Tasteneingaben 'hört'?

Viele Grüße

Achim\n\n

<!--EDIT|achso|1068988770-->
eisbeer
 2003-11-16 15:31
#71891 #71891
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sag mal, für was du das brauchst, da gibts nämlich sicher noch
ne andere lösung!
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
pq
 2003-11-16 17:14
#71892 #71892
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use Term::ReadKey;
$SIG{INT} = sub{ReadMode 0;exit;};
ReadMode 4;

while(1){
my $key;
 while (not defined ($key = ReadKey(-1))) {
   tu_was();
   sleep 1;
 }
 if ($key eq "q") {last;}
}
ReadMode 0;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
achso
 2003-11-16 20:46
#71893 #71893
User since
2003-09-03
8 Artikel
BenutzerIn
[default_avatar]
Hallo Eisbär,
klar, ich könnte auf meine Armbanduhr schauen...
Nein, im Grunde ist das Programm nur dazu gedacht, eine Möglichkeit zu finden, um eine Schleife von außen zu beeinflussen.

Gruß Achim\n\n

<!--EDIT|achso|1069008463-->
achso
 2003-11-16 21:40
#71894 #71894
User since
2003-09-03
8 Artikel
BenutzerIn
[default_avatar]
Hallo pq

vielen Dank für Deine schnelle Hilfe.
Das Modul Term::ReadKey musste ich mir zwar zuerst noch von CPAN besorgen, doch nach der Installation funktionierte es auf Anhieb.
Allerdings traten einige interessante Effekte auf.
- wird das Programm zum ersten Mal gestartet und mit "Q" beendet, zeigt die Shell mit den Pfeil-nach-oben und Pfeil-nach-unten Tasten keine Kommandos aus der .bash_history mehr an, führt sie aber trotzdem aus
- wird nach dem Beenden mit "Q", "Return" gedrückt, erfolgt für den neuen Eingabeprompt kein Zeilenumbruch, dieser wird stattdessen direkt an den vorherigen Prompt angefügt
- werden beim erstmaligen Start des Programms während des Hochzählens der Sekunden beliebige Buchstaben eingegeben, kann mit "Q" nicht mehr beendet werden, dafür mit "Return", und die oben beschriebenen Effekte bleiben aus.
- ist das Programm einmal gelaufen und wird neu gestartet, können während des Programmlaufes keine Zeichen über die Tastatur eingegeben werden und es beendet sauber mit "Q" - allerdings mit oben beschriebenen Nebenwirkungen.
Alles in allem recht mysteriös.

Trotzdem vielen Dank für Deine Hilfe

Viele Grüße

Achim
pq
 2003-11-17 02:45
#71895 #71895
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=achso,16.11.2003, 20:40]- wird das Programm zum ersten Mal gestartet und mit "Q" beendet, zeigt die Shell mit den Pfeil-nach-oben und Pfeil-nach-unten Tasten keine Kommandos aus der .bash_history mehr an, führt sie aber trotzdem aus[/quote]
hmm, bei mir nicht. du musst natürlich die methode tu_was() definiert haben.
das phänomen, das du beschreibst, tritt nur auf, wenn kein ReadMode 0
vor verlassen des programms mehr aufgerufen werden konnte.
(kleine hilfe für die shell: 'stty echo' holt das echo wieder zurück)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2003-11-17 11:36
#71896 #71896
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
kann man das auch umschreiben, dass nicht mit einem Tastendruck die Schleife beendet wird, sondern mit einem Mausklick??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2003-11-17 12:54
#71897 #71897
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
hmmm... nicht einfach, denke ich... hast Du denn die Maus in der Konsole aktiviert?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
achso
 2003-11-17 21:24
#71898 #71898
User since
2003-09-03
8 Artikel
BenutzerIn
[default_avatar]
Hallo pq,

und zum wiederholten Mal hilfst Du mir aus der Verlegenheit. Vielen Dank.
Ich habe

system ("stty echo");

eingebaut, und es funktioniert.
Noch einmal herzlichen Dank für Deine Hilfe.

Viele Grüße

Achim
<< >> 9 Einträge, 1 Seite



View all threads created 2003-11-16 15:18.