Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6252[/thread]

Konsole verbiegen? (/dev/tty1 -> /dev/tty2)



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
quetzalcoatl
 2004-05-12 17:10
#82311 #82311
User since
2004-04-01
51 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte mit Perl den output bzw. alles was in der Konsole eins (/dev/tty1) steht, in eine Datei oder ein anderes Terminal leiten (schreiben).

Leider haben meine bisherigen Versuche fehlgeschlagen.

Versucht hab ich's mit "Term::ReadKey" mit sysopen usw. -  hab wirklich viel versucht.

Bisher schaffe ich es zwar jedes getippte Zeichen abzufangen und zu speichern aber nicht wenn man Zeichen an die Konsole sendet ( echo "9999" >> /dev/tty1). Da bekomm ich leider nix - aber das ist ja eigentlich genau das was ich brauch (die getippen Sachen brauch ich nicht).

Sprich, der stdout vom /dev/tty1 bekomm ich - aber anscheinend nicht den stdin.

Nun hab ich ein paar Beiträgen in den Groups gelesen, dass man anscheinend dieses erste Terminal erst in ein pseudo Terminal leiten und dann kann man es weiterverarbeiten.

Ich dachte an eine Lösung die den FileHandle vom tty1 kopiert und (mit einer pipe?) in das andere Terminal (oder gleich datei?) leiten.

Frage: Wie kann ich den gesamten Output eines Terminals in eine Datei speichern?

Gruss,
quetzal\n\n

<!--EDIT|quetzalcoatl|1084367736-->
Crian
 2004-05-12 17:45
#82312 #82312
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
open (STDOUT, ">$dateiname") or die $!;
open (STDERR, ">$dateiname") or die $!;
\n\n

<!--EDIT|Crian|1084369568-->
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
ptk
 2004-05-12 17:54
#82313 #82313
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Kannst du genauer sagen, wozu du das brauchst? Womoeglich hilft ja auch einfach nur "man script".
quetzalcoatl
 2004-05-12 17:56
#82314 #82314
User since
2004-04-01
51 Artikel
BenutzerIn
[default_avatar]
Danke für die schnelle Antwort....aber.. :)

ich mach es entweder falsch - oder ich wurde missverstanden :D

hier mal der ganze code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl -w

use IO::Handle;
#use POSIX qw(:termios_h);
use Fcntl;
use Term::ReadKey;
use Time::HiRes qw ( sleep);

# save pid
open (PID, ">/var/run/bootlog.pid");
print PID "$$";
close(PID);

### initial aktion ###
sysopen(LOGA,"/dev/vcsa1", O_NONBLOCK|O_RDWR) || die "Konnte input Konsole nicht öffnen";
open(TEST, ">>/var/log/test.log") || die "Error! can't open file /var/log/test.log\n";

open (STDOUT, ">>/var/log/test33.log") or die $!;
open (STDERR, ">/var/log/test33.log") or die $!;

# Strg-C Handle
sub kilhd {
print "User abort\n";
close(TEST);
close(LOGA);
#ReadMode 0, LOGA;
exit 0;
}

local $SIG{INT} = \&kilhd;

#ReadMode 1,LOGA; # Turn off controls keys
#$key=0;

# Main
while (1) {

sleep(0.2);
sysread(LOGA,$buffer,10);
$|=1;
if ($buffer ne "\n") {
syswrite(TEST,$buffer,10);
#syswrite(LOGA,$buffer,1);
TEST->autoflush();
LOGA->sync();
}

}

Weiß irgendwie nicht was ich mit dem "open(STDIN...)" anstellen soll :D
da ich ja nicht den in/output vom aktuellen Terminal verbiegen will - sondern die Ein- und Ausgabe vom tty1.

Gruss,
quetzal
quetzalcoatl
 2004-05-12 18:01
#82315 #82315
User since
2004-04-01
51 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,12.May.2004, 15:54]Kannst du genauer sagen, wozu du das brauchst? Womoeglich hilft ja auch einfach nur "man script".[/quote]
eigentlich soll das mal ein "bootlogd" werden - der einfach alles, was auf der ersten Konsole während des Bootvorgang erscheint, mitloggt.

So das man es später ganz bequem lesen kann.

Ich weiß das im sysvinit Paket ein bootlogd dabei ist - der lässt sich aber nicht (mehr) so einfach übersetzten und wird auch bei der installation von sysvinit nicht mitinstalliert.

Daher will ich eine eigene Lösung und eben nicht per "setterm" oder sonstwie lösen. (mit "setterm -dump 1 > /var/log/boot.log" (jede sekunde) und dann die doppelten Zeilen rausschneiden). Oder screen, script usw.

Eben am liebsten eine (fast) eigene Perl Lösung - das ist der ideal fall :)

Gruss,
quetzal
Crian
 2004-05-12 18:16
#82316 #82316
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Achso, dann hab ich Dich schlicht falsch verstanden.
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
quetzalcoatl
 2004-05-12 18:17
#82317 #82317
User since
2004-04-01
51 Artikel
BenutzerIn
[default_avatar]
:) sowas hab ich schon vermutet.
Crian
 2004-05-12 18:27
#82318 #82318
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht hilft Dir POSIX::Termios?

Jedenfalls, wenn Du die Filehandlenummer zum tty1 rausbekommst (könnte die ev. immer gleich sein?)

Davon ab mein ich doch aber, dass die Anzeigen eh in eine Datei gespiegelt werden, weiß nur leider nicht mehr, wie die heißt.\n\n

<!--EDIT|Crian|1084372320-->
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
ptk
 2004-05-12 18:37
#82319 #82319
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich denke mal, dass das, was sich bereits auf dem Screen befindet, nicht mehr ueber /dev/tty* ansprechbar ist, sondern sich voll und ganz in der Verantwortung der Terminal-Emulators befindet. Ob es standardisierte Funktionen zum Auslesen des Terminal-Buffers gibt, weiss ich nicht.
quetzalcoatl
 2004-05-12 19:03
#82320 #82320
User since
2004-04-01
51 Artikel
BenutzerIn
[default_avatar]
naja, ich weiß nicht - wenn ich doch was tippe erscheint das ja auch (ohne das ich es persönlich nach dem abfangen wieder hinschicke) auf dem Screen - daher kann es nicht sein das die Zeichen die man am Monitor sieht, nicht mehr zu bekommen sind.

Oje, - das C file von bootlogd ist nicht besonders groß. Heißt im umkehrschluss - ich muss es wohl in C machen, bzw. den bootlogd (sysvinit) überarbeiten.

Schade.

@Crian:  POSIX::Termios - hatte ich schon mal drinnen - da ich's aber nicht geschafft hab, hatte ich es auf die Seite gelegt - werds mir wohl nochmal ansehen.

Danke euch.

Gruss,
quetzal
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2004-05-12 17:10.