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

output von gnuplot speichern



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
johnh
 2008-10-12 02:31
#115395 #115395
User since
2008-10-05
23 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich schaffe es nicht die Ausgabe von Gnuplot abzuspeichern, mein Code sieht folgendermassen aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
open GP, '|c:/Test/Gnuplot_Perl/gp424win32/gnuplot/bin/pgnuplot.exe';
open (hier,">output.png");
use FileHandle;
GP->autoflush(1);
print GP 'load "Packetloss.txt"', "\n";
print hier GP;
sleep 3;
close hier;
close GP;


-- Packetloss.txt enthält die Befehle für das Programm gnuplot
Kann mir jemand erklären, wie ich die Ausgabe abspeichern kann ? Format kann gif der png sein...

Grüße,
J
topeg
 2008-10-12 04:26
#115398 #115398
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Entweder du pipest die Eingabe oder die Ausgabe, aber beides geht nicht auf diese weise.

So könnte man es machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $gplot_file='Packetloss.txt';
my $gplot_cmd='c:/Test/Gnuplot_Perl/gp424win32/gnuplot/bin/pgnuplot.exe';
my $out_file='output.png';

open(my $ch, "$gplot_cmd $gplot_file |") or die "Fehler bei '$gplot_cmd $gplot_file |' ($!)\n";
open(my $fh, '>', $out_file) or die "Fehler beim oeffnen von '$out_file' ($!)\n";
while(my $data=<$ch>)
{
  print $fh $data;
}
close($fh);
close($ch);


oder so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use FileHandle;

my $gplot_file='Packetloss.txt';
my $gplot_cmd='c:/Test/Gnuplot_Perl/gp424win32/gnuplot/bin/pgnuplot.exe';
my $out_file='output.png';

my $gplotfh = new FileHandle;
$gplotfh->open ("$gplot_cmd $gplot_file |") or die "Fehler bei '$gplot_cmd $gplot_file |' ($!)\n";

my $gimage = new FileHandle;
$gimage->open ("> $out_file") or die "Fehler beim oeffnen von '$out_file' ($!)\n";

while(my $data=<$gplotfh>)
{
  $gimage->print($data);
}

undef($gplotfh);
undef($gimage);


Oder einfacher:
Code (perl): (dl )
1
2
3
4
5
my $gplot_file='Packetloss.txt';
my $gplot_cmd='c:/Test/Gnuplot_Perl/gp424win32/gnuplot/bin/pgnuplot.exe';
my $out_file='output.png';

system("$gplot_cmd $gplot_file > $out_file") == 0 or die "konnte '$gplot_cmd $gplot_file > $out_file' nicht ausführen ($?)\n";


Nebenbei, du kannst auch die Ausgabedatei im Gnuplotsript angeben. und brauchst nicht das STDOUT umzulenken. Aber ich weiß ja nicht was du alles damit vorhast...
moritz
 2008-10-12 11:36
#115399 #115399
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
johnh+2008-10-12 00:31:46--
Hallo Leute,

ich schaffe es nicht die Ausgabe von Gnuplot abzuspeichern


Soweit ich weiss, schreibt Gnuplot die Ausgabe entweder in eine Datei, oder öffnet ein Fenster - dass es die Datei nach STDOUT ausgibt habe ich bisher noch nie erlebt.

Im Zweifelsfall hilft CPAN:Chart::Gnuplot.
topeg
 2008-10-12 12:48
#115400 #115400
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
@moritz
probier mal
Code: (dl )
1
2
set terminal png
set output "| cat -"

und es wird alles nach STDOUT geschickt (je nach Umgebung soll manchmal auch `set output "STDOUT"` funktionieren)
johnh
 2008-10-12 12:57
#115401 #115401
User since
2008-10-05
23 Artikel
BenutzerIn
[default_avatar]
Danke erstmall...

Allerdings bekomme ich stets eine leere Datei...

Aber muss das hier:
Code (perl): (dl )
 my $gplot_file='Packetloss.txt';


nicht duch das hier erzetzt werden, weil es is ja ein Textfile mit den ganzen befehlen..
Code (perl): (dl )
1
2
3
4
5
6
7
open(MYDATA, "Packetloss.txt") die ("Error: cannot open file 'data.txt'\n");
my $line;
while( $line = <MYDATA> ){              
  print " $line\n";

}
close MYDATA;



Wenn ich nämlich
Code (perl): (dl )
print $gplot_file; 

ausführe bekomme ich einfach das angezeigt, was hinter dem gleichheitszeichen steht...
moritz
 2008-10-12 13:08
#115403 #115403
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Wieso willst du die Datei von deinem Perl-Script aus laden, anstatt Gnuplot das ganze machen zu lassen?
moritz
 2008-10-12 13:10
#115404 #115404
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
topeg+2008-10-12 10:48:15--
@moritz
probier mal
Code: (dl )
1
2
set terminal png
set output "| cat -"

und es wird alles nach STDOUT geschickt (je nach Umgebung soll manchmal auch `set output "STDOUT"` funktionieren)


Wieso sollte ich das wollen? Man will das Ergebnis ja in einer Datei haben - und ich verstehe immer noch nicht warum johnh das nicht einfach macht.
johnh
 2008-10-12 13:24
#115405 #115405
User since
2008-10-05
23 Artikel
BenutzerIn
[default_avatar]
Du Moritz ich bin nicht so super vertraut mit Perl...

In "Packetloss.txt" habe ich :
Code (perl): (dl )
1
2
set terminal png
set output "| cat -"

geschrieben gehabt, nur mit einer expliziten angabe einer Dateiname. Auch diese Zeilen haben nichts gebracht... Ich bekomme zwar ne eingabe, aber die ist 1 Byte groß..
topeg
 2008-10-12 13:30
#115406 #115406
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
@johnh
Eh?? Was??
Hast du überhaupt mal die Doku zu Gnuplot gründlich gelesen?
Wie sieht dein GnuplotScript aus?

johnh+2008-10-12 10:57:25--
Wenn ich nämlich
Code (perl): (dl )
print $gplot_file; 

ausführe bekomme ich einfach das angezeigt, was hinter dem gleichheitszeichen steht...

Natürlich. Nochmal: Ließ dir bitte durch, wie sich gnuplot bedienen lässt.
Man kann Namen von GnuplotScriptDateien als Parameter an Gnuplot übergeben, die dann der Reihe nach ausgeführt werden. Das steht auch so in der Doku.

Also meine Beispiele funktionieren, wenn das GnuplotScript korrekt ist, und seine Ausgabe tatsächlich auf STDOUT macht.
topeg
 2008-10-12 13:34
#115407 #115407
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
johnh+2008-10-12 11:24:40--
In "Packetloss.txt" habe ich :
Code (perl): (dl )
1
2
set terminal png
set output "| cat -"

Das klappt nur unter *nix artigen Systemen. Windows kennt das Programm "cat" nicht. Das wird bei dir nicht funktionieren.

Schreib doch einfach mal ein Dateinamen wie "output.png" in das "set output"

Übrigens hat das nichts mit perl zu tun Gnuplot ist was ganz anderes.
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2008-10-12 02:31.