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

Zugriff auf Stdout innerhalb einer Windows-Umgebung?



<< >> 3 Einträge, 1 Seite
Gast Gast
 2009-02-20 11:39
#119030 #119030
Hallo zusammen!

Ich möchte innerhalb eines Perl-Scriptes den Datendurchsatz eines Links testen. Dazu wird zunächst ein Befehlsskript, welches mit dem Windows-eigenen FTP-Tool kompatibel ist, erstellt:

Code: (dl )
1
2
3
4
5
6
open <ip>
<username>
<password>
hash
get 500k.txt
quit


Anschließend führe ich dieses Skript innerhalb des Perlcodes wie folgt aus:

Code (perl): (dl )
1
2
3
system(@args);
@args = ("ftp", "-s:c:\\ftp_dl.txt");
system(@args);


Falls man das das FTP-Tool direkt innerhalb einer Dos-Box ausführt, erhält man den folgenden Output:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ftp> open <ip>
Connected to <ip>
220 "Welcome to the fast and fabulous DUFTP005 ftp-server :-) "
User (<ip>:(none)):
331 Please specify the password.

230 Login successful.
ftp> hash
Hash mark printing On ftp: (2048 bytes/hash mark) .
ftp> get 500k.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for 500k.txt (14336 bytes).
#######
226 File send OK.
ftp: 14336 bytes received in 0.00Seconds 14336000.00Kbytes/sec.
ftp> quit
221 Goodbye.


Um den Datendurchsatz zu extrahieren, benötige ich also die folgende Zeile:

Code: (dl )
 ftp: 14336 bytes received in 0.00Seconds 14336000.00Kbytes/sec.


Hat jemand eine Idee, wie ich diese Zeile als String extrahieren kann? Ich kenne mich leider mit Perl nicht sonderlich gut aus ...

Liebe Grüße,

Markus
Linuxer
 2009-02-20 11:54
#119031 #119031
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Wenn Du die Ausgabe eines Kommandos haben willst, solltest Du Backticks, qx() oder open verwenden.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
# gesamte Ausgabe in $result
my $result = qx( dir C:/ );

# oder

open my $pipe, '-|', 'dir C:/' or die "cannot open pipe: $!";

while ( my $line = <$pipe> ) {
  # tu was mit zeile
}

close $pipe or die "cannot close pipe: $!";
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
pq
 2009-02-20 12:36
#119037 #119037
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
einmal posten reicht.
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
<< >> 3 Einträge, 1 Seite



View all threads created 2009-02-20 11:39.