Schrift
[thread]3045[/thread]

Einfache Linux-Ausgabe "df -k"

Leser: 2


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Gast Gast
 2006-12-15 20:40
#28795 #28795
Hallo
ich moechte mit einem Perl-Script eine einfache Ausgabe "df -k" auf dem Server ausfuehren, der mir dann anzeig, wie die Plattenbelegung ist
Ich habe es so gemacht - da kommt aber alles unformatiert in den Browser - was mache ich falsch - Bin Neuling ...
(use strict ist auskommentiert, sonst geht gar nichts ...)

---------------------------------------------------------
#!/usr/bin/perl -w
#use strict;
use CGI::Carp qw(fatalsToBrowser);
$ausgabe= system "df -k \n";
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Plattenplatz</title>\n";
print "</head><body>\n";
print "$ausgabe\n";
print "</body></html>\n";
topeg
 2006-12-15 21:04
#28796 #28796
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Du mußt dem Browser sagen, daß der text Vorformatiert ist, das macht man mit dem Tag "<pre>...</pre>" innerhalb dies Tags wird alles so ausgeben wie auf der Konsole. (siehe dazu Selfhtml: preformatiereter Text)
Ronnie
 2006-12-15 22:36
#28797 #28797
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hinweis: Wenn du use strict; verwendest musst du auch deine Variable mit my deklarieren. Das \n bei deinem system-Befehl ist unnötig. Wobei es sinnvoller ist qx zu verwenden.

Experimentiere erstmal topegs Antwort. Hier noch ein etwas fortgeschrittener (aber leicht fehlerhafter Ansatz):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use HTML::Table;

my $cgi = CGI->new;
print $cgi->header, $cgi->start_html;

my $t = HTML::Table->new( [map {[split /\s+/]} split /\n/, qx/df -h/] );
$t->setRowStyle($_,
$_ % 2 == 0 ? 'background-color: #ddd;' : 'background-color: #6d6;'
) for (1..$t->getTableRows);
$t->setRowStyle(1, 'background-color: Ć color: #fff;');

print $t, $cgi->end_html;
\n\n

<!--EDIT|Ronnie|1166215263-->
bloonix
 2006-12-15 22:57
#28798 #28798
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Benoetigte Module:

CPAN:Sys::Statistics::Linux
CPAN:HTML::Template
CPAN:CGI

diskusage.cgi
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use HTML::Template;
use Sys::Statistics::Linux::DiskUsage;

my $lxs   = new Sys::Statistics::Linux::DiskUsage;
my $usage = $lxs->get;
my $tmpl  = HTML::Template->new(filename => './diskusage.tmpl');

my @data;

foreach my $disk (sort keys %{$usage}) {
  $usage->{$disk}->{name} = $disk;
  push @data, $usage->{$disk};
}

$tmpl->param(DISKUSAGE => \@data);
print "Content-Type: text/html\n\n", $tmpl->output;


diskusage.tmpl
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>Disk Usage</title>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  <style type="text/css">
     .table { width: 60%; border-collapse: collapse; }
     .lcol  { width: 10%; border: 1px solid � text-align: left; }
     .rcol  { width: 10%; border: 1px solid � text-align: right; }
  </style>
</head>
<body>
<table class="table">
  <tr>
     <th class="lcol">NAME</th>
     <th class="lcol">TOTAL</th>
     <th class="lcol">USAGE</th>
     <th class="lcol">FREE</th>
     <th class="lcol">USAGE%</th>
     <th class="lcol">MOUNT POINT</th>
  <TMPL_LOOP NAME="DISKUSAGE">
  </tr><tr>
     <td class="lcol"><TMPL_VAR NAME="name"></td>
     <td class="rcol"><TMPL_VAR NAME="total"></td>
     <td class="rcol"><TMPL_VAR NAME="usage"></td>
     <td class="rcol"><TMPL_VAR NAME="free"></td>
     <td class="rcol"><TMPL_VAR NAME="usageper"></td>
     <td class="lcol"><TMPL_VAR NAME="mountpoint"></td>
  </TMPL_LOOP>
  </tr>
</table>
</body>
</html>


Eventuell laesst sich das sogar mit CPAN:HTML::Template::Compiled besser lösen. :)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
pq
 2006-12-16 01:46
#28799 #28799
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=opi,15.12.2006, 21:57]Eventuell laesst sich das sogar mit CPAN:HTML::Template::Compiled besser lösen. :)[/quote]
ein bisschen =)

Code: (dl )
1
2
3
4
5
6
my $htc  = HTML::Template::Compiled->new(
   filename => 'diskusage.tmpl',
   loop_context_vars => 1,
);

$htc->param(usage => $usage);

Code: (dl )
1
2
3
4
5
6
<%each  usage %>
<%= __key__ %>:
<%each __value__ %>
   <%= __key__ %>: <%= __value__ %>
<%/each __value__ %>
<%/each  usage %>

das geht mit version 0.83.
in der naechsten version wird es aber auch mit loops gehen, da werden
dann aber die keys noch alphabetisch sortiert.
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
SimplyFred
 2006-12-16 15:04
#28800 #28800
User since
2006-12-16
25 Artikel
BenutzerIn
[default_avatar]
SUPER ...

das hat ja klasse geklappt, hatte zwar etwas Probleme mit den Modulen, die da nicht installiert waren, aber nun läuft es super - DANKE VIELMALS !

Die Module fehlen wahrscheinlich deswegen, weil ich Debian auf einer Linksys-NSLU nutze und dabei der Speicherplatz nicht allzugross ist.
Das Teil hat nur 32MB und da war die Problematik die Module von der CPAN dazuzuinstallieren - "low memory"

Dann habe ich es mit perl Makefile.pl gemacht, da fehlte aber "make" - also nachinstalliert und jetzt läuft das !
bloonix
 2006-12-16 15:13
#28801 #28801
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo SimplyFred,

was ist denn eine Linksys-NSLU?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
GwenDragon
 2006-12-16 16:01
#28802 #28802
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
sid burn
 2006-12-17 01:11
#28803 #28803
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Wieso den Speicherproblem? Die NSLU wurde doch dafür gedacht sowieso externe Festplatten anzuschließen.

Was hindert dich daran eine externe festplatte anzuschließen und diese zu deinem Debian System dazu zu mounten?

Sachen wie /home /lib /usr /var kannst du dann ja darauf auslagern.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
SimplyFred
 2006-12-18 20:39
#28804 #28804
User since
2006-12-16
25 Artikel
BenutzerIn
[default_avatar]
Hallo nochmal:

Die Fehlermeldung, die ich bekam, bezog sich auf den 32MByte kleinen Arbeitsspeicher, nicht auf den Plattenspeicher.
Ich betreibe die Linksys mit 2GByte SD-Karte auf der wiederum Debian laeuft.

Aber nochmal eine andere Frage - zu Perl ...
Da bin ich Anfaenger und bitte dumme Fragen zu entschuldigen:

1. Im diesem Thread oben wird immer wieder auf bestimmte Perl-Module hingewiesen.
z.B. Sys::Statistics::Linux - HTML::Template - CGI, etc...

Woher weiss ich denn, was welches Modul macht ?
In meinem Falle (df -k) gab es ja sowas schon sozusagen fertig.
Wo kann man das genau nachlesen ?
Gibt es eine gute Suchmaschine speziell fuer sowas ?

Ich suche wiederum was, was z.B. ein Linux-Dateiverzeichnis einliest (ls -l), alphabetisch sortiert (ja ich weiss, kann ja Linux schon) und dann als Datei ausgibt, die die entsprechenden Felder mit Semikolon oder TAB trennt, damit ich sie wiederum in z.B. Excel verwenden kann.
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2006-12-15 20:40.