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";
User since
2006-07-10
2611
Artikel
BenutzerIn
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)
User since
2003-08-14
2022
Artikel
BenutzerIn
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):
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-->
User since
2005-12-17
1615
Artikel
HausmeisterIn
Benoetigte Module:
Sys::Statistics::Linux
HTML::Template
CGI
diskusage.cgi
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
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
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.
User since
2003-08-04
12208
Artikel
Admin1
[quote=opi,15.12.2006, 21:57]Eventuell laesst sich das sogar mit
HTML::Template::Compiled besser lösen. :)[/quote]
ein bisschen =)
my $htc = HTML::Template::Compiled->new(
filename => 'diskusage.tmpl',
loop_context_vars => 1,
);
$htc->param(usage => $usage);
<%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.
User since
2006-12-16
25
Artikel
BenutzerIn
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 !
User since
2005-12-17
1615
Artikel
HausmeisterIn
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.
User since
2005-01-17
14748
Artikel
Admin1
[quote=opi,16.12.2006, 14:13]was ist denn eine Linksys-NSLU?[/quote]
http://www.idealo.de/preisvergleich/OffersOfProduc...
User since
2006-03-29
1520
Artikel
BenutzerIn
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
User since
2006-12-16
25
Artikel
BenutzerIn
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.