Schrift
[thread]7037[/thread]

IPC mit perl

Leser: 1


<< >> 4 Einträge, 1 Seite
DanMak
 2005-06-06 18:53
#55354 #55354
User since
2005-06-06
2 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe folgenden script:

Code: (dl )
1
2
3
4
5
6
7
8
9
use strict;
my $srcdrive="/dev/hda";
my $pid;
$pid = open(PH,"dd if=$srcdrive | gzip -v9 >/dev/hdb1/image.zip |");
select STDOUT;$|=1;
while(<PH>)
{
print "output = $_";
}


wie schaffe ich den STDERR kanal vom "dd" in STDIN umzuleiten ? Der Aufruf open(PH,"dd if=$srcdrive of=/dev/null bs=1024k count=30 2>&1 |"); funktioniert ohne probleme. Geht das ueberhaupt mit open ?

Danke im Voraus.

Crian: code-Tags hinzugefügt.\n\n

<!--EDIT|Crian|1118234209-->
Strat
 2005-06-06 19:32
#55355 #55355
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit open kannst du Programme nur entweder zum lesen oder zum schreiben oeffnen... zum gleichzeitigen lesen/schreiben koennte dir eins der folgenden module weiterhelfen:
IPC::Open2
IPC::Open3 (das duerfte wohl das sein, das du willst)
Expect (ist kein Standardmodul)

[edit]Ist bloedsinn, braucht vermutlich nur STDERR auf STDOUT umgeleitet werden... siehe betterworlds antwort[/edit]\n\n

<!--EDIT|Strat|1118073024-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
betterworld
 2005-06-06 19:45
#55356 #55356
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich weiss nicht ganz genau, was Du da machen moechtest. Moechtest Du einfach die Fehlermeldungen von dd abfangen? Das wuerde ich vielleicht so machen:
Code: (dl )
1
2
3
4
5
6
use strict;
use warnings;
my $pid = open(PH, "{ dd if=$srcdrive | gzip -v9 >/dev/hdb1/image.zip; } 2>&1 |") or die $!;
while (<PH>) {
print "output = $_";
}


Beachte auch, dass ich den Rueckgabestatus von open abfange.

Ferner frage ich mich, ob /dev/hdb1/image.zip nicht ein falscher Pfad ist, denn normalerweise ist /dev/hdb1 ein Device und kein Mountpoint oder Verzeichnis.

Edit: Pipe vergessen\n\n

<!--EDIT|betterworld|1118072823-->
DanMak
 2005-06-06 20:06
#55357 #55357
User since
2005-06-06
2 Artikel
BenutzerIn
[default_avatar]
Hallo, danke das war exakt was ich wollte!

Zu deiner Frage : Ich gebe damit den aktuellen Status von dd aus. Die Zeile ..gzip -v9 >/dev/hdb1/image.zip.. war sicher falsch soll natuerlich ..gzip -v9 >/mnt/hdb1/image.zip.. sein.

mfg Daniel
<< >> 4 Einträge, 1 Seite



View all threads created 2005-06-06 18:53.