Schrift
[thread]7769[/thread]

Ausgabe umleiten: Aus einem Skript heraus sollen ....

Leser: 1


<< >> 8 Einträge, 1 Seite
raprezent
 2006-03-07 16:20
#63569 #63569
User since
2005-09-27
12 Artikel
BenutzerIn
[default_avatar]
Hallo miteinander

ich habe folgendes problem.
normaler weise kann ich per
$var = `befehl`;
befehle lokal auf einer unix-kiste ausführen und die ausgabe wird dann in $var gespeichert. Dies funktioniert prima zum beispiel mit "ifconfig" oder "uname"
wenn jetzt aber ein programm wie ftp ausgeführt wird, wird nichts zurück gegeben. ich vermute dass die ausgabe an einen bestimmten ort umgeleitet wird aber nicht mehr ins perl skript.
was kann ich tun, dass wenn ich zum beispiel "ftp" aufrufe die ausgaben ins perl programm kriege??\n\n

<!--EDIT|raprezent|1141741282-->
Relais
 2006-03-07 16:26
#63570 #63570
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dein Ansatz ist schwerfällig, denn mit Interaktiven Programmen so umzugehen ist gar nicht leicht. Der Weg, den Du zu gehen hättest, wäre etwa mit CPAN:dem Expect-Modul zu arbeiten.

Das sollte aber gar nicht erst notwendig werden, denn für viele gängige und auch viele weniger gängige Protokolle und typische Anwendungen gibt es CPAN-Module, für FTP etwa CPAN:Net::FTP.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
raprezent
 2006-03-07 16:30
#63571 #63571
User since
2005-09-27
12 Artikel
BenutzerIn
[default_avatar]
es geht eben darum :)
ich bin im moment ein bisschen mit sockets am rumspielen und habe mir was zu sammen geschrieben mit dem ich von einer maschine auf eine andere maschine connecten kann und dann beliebigen befehl ausführen kann ..
daher weiss ich ja noch nicht im vorhinein welche befehle derjenige ausführen will ... und dann zum beispiel mit dem ftp modul abfangen kann ....
Relais
 2006-03-07 16:37
#63572 #63572
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Es gäbe da auch noch CPAN:IPC::Open3, was Prozesse für's Lesen/Schreiben und auch deren Fehlerkanal öffnet.
Das ist aber natürlich auch nicht direkt für Remote-Verbindungen gedacht.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
bloonix
 2006-03-07 16:42
#63573 #63573
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo raprezent,

du kannst auch Net::FTP verwenden. Hier ein Anwendungs-
beispiel:

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
use strict;
use warnings;
use Net::FTP;

my $server     = "Server";
my $user       = "User";
my $password   = "Password";
my $localfile  = "Localdir/Localfile";
my $remotefile = "Remotedir/Remotefile";

print "connecting to server $server ... ";
my $ftp = Net::FTP->new($server) or die $!;
print "ok\n";

print "login ... ";
$ftp->login($user,$password) or die $!;
print "ok\n";

print "changing to binary mode ... ";
$ftp->binary or die $!;
print "ok\n";

print "transfer $remotefile ... ";
$ftp->put($localfile,$remotefile) or die $!;
print "ok\n";

$ftp->quit;


Greez,
opi

Edit (Umleitung Beispiele):

my $workdir = $ftp->pwd or die $!;
my @list = $ftp->dir("Verzeichnis") or die $!;\n\n

<!--EDIT|opi|1141742772-->
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.
bloonix
 2006-03-07 17:28
#63574 #63574
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=raprezent,07.03.2006, 15:30]und habe mir was zu sammen geschrieben mit dem ich von einer maschine auf eine andere maschine connecten kann und dann beliebigen befehl ausführen kann ..[/quote]
Einen beliebigen Befehl? Also auch sowas wie

Code: (dl )
rm -r *


? Klingt sehr unsicher, aber du weißt bestimmt was du tust.
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.
Gast Gast
 2006-03-10 21:23
#63575 #63575
Ich weiß nicht ob du jetzt schon eine allgemeine Lösung hast, aber es sollte auch mit open(); klappen.

Beispiel:
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl -w
#
use strict;

my $var;

open($var,system('ftp'));
print $var;
close $var;


Das geht recht schnell und ist recht einfach.

MfG. Matze
esskar
 2006-03-11 00:21
#63576 #63576
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=raprezent,07.03.2006, 15:20]was kann ich tun, dass wenn ich zum beispiel "ftp" aufrufe die ausgaben ins perl programm kriege??[/quote]
du hast erst die daten in perl, sobald sich das programm beendet.
wenn du direkt auf den output zugreifen willst, musst du entweder mit der piped-version von open arbeiten, oder wie relaise schont meinte, direkt mit IPC::Open3 (was eigentlich das selbe ist)
<< >> 8 Einträge, 1 Seite



View all threads created 2006-03-07 16:20.