LINUX.ORG.RU

Странное поведение system в perl


0

0

есть принтер hp laserjet 2200? подключенный через usb очередь печати - lprng perl-овый фильтр для этого принтера печатаю довольно простенькие ps файлы

проблема в следующем, фильтр почему-то печатает задание дважды

код фильтра

#! /usr/bin/perl -w

use File::Glob ':globally';

my $sig = "HP LaserJet 2200"; my $size = "a4";

my $dev = "";

my $dir = ""; my $file = "";

my $jnum = "";

foreach $i (@ARGV) { if ($i =~ /^\-Z/) { $i =~ s/\-Z//; $size = $i; } if ($i =~ /^\-d/) { $i =~ s/\-d//; $dir = $i; } if ($i =~ /^\-e/) { $i =~ s/\-e//; $file = $i; } if ($i =~ /^\-j/) { $i =~ s/\-j//; $jnum = $i; } }

my $job = "$dir/$file";

foreach $i ("/dev/usb/lp0", "/dev/usb/lp1") { my $res = ""; open (LP, $i) or next; ioctl (LP, 0x84005001, $res); close LP; $dev = $i if ($res =~ /$sig/); }

die "Printer $sig not found.\n" if ($dev =~ /^$/);

open (FILE, "<", $job) or die "Can't open job file $job. $!\n"; close FILE;

system ("/usr/bin/gs", "-q", "-sDEVICE=psmono", "-sPAPERSIZE=$size", "-dNOPAUSE", "-dSAFER", "-sOutputFile=$dev", "$job", "-c quit") == 0 or die "Can't run gs: $!\n"; unlink <$dir/*$jnum*>;

exit 0;

софт

lprng - 3.8.21 ghostscript - 8.01 perl - 5.8.0

заранее спасибо за помощь.

★★★★★

блин, форматирование

есть принтер hp laserjet 2200? подключенный через usb
очередь печати - lprng
perl-овый фильтр для этого принтера
печатаю довольно простенькие ps файлы

проблема в следующем, фильтр почему-то печатает задание дважды

код фильтра

#! /usr/bin/perl -w

use File::Glob ':globally';

my $sig = "HP LaserJet 2200";
my $size = "a4";

my $dev = "";

my $dir = "";
my $file = "";

my $jnum = "";

foreach $i (@ARGV) {
    if ($i =~ /^\-Z/) {
	$i =~ s/\-Z//;
	$size = $i;
    }
    if ($i =~ /^\-d/) {
	$i =~ s/\-d//;
	$dir = $i;
    }
    if ($i =~ /^\-e/) {
	$i =~ s/\-e//;
	$file = $i;
    }
    if ($i =~ /^\-j/) {
	$i =~ s/\-j//;
	$jnum = $i;
    }
}

my $job = "$dir/$file";

foreach $i ("/dev/usb/lp0", "/dev/usb/lp1") {
    my $res = "";
    open (LP, $i) or next;
    ioctl (LP, 0x84005001, $res);
    close LP;
    $dev = $i if ($res =~ /$sig/);
}

die "Printer $sig not found.\n" if ($dev =~ /^$/);

open (FILE, "<", $job) or die "Can't open job file $job. $!\n";
close FILE;

system ("/usr/bin/gs", "-q", "-sDEVICE=psmono", "-sPAPERSIZE=$size",
	"-dNOPAUSE", "-dSAFER", "-sOutputFile=$dev", "$job", "-c quit") == 0
    or die "Can't run gs: $!\n";
unlink <$dir/*$jnum*>;

exit 0;

софт

lprng - 3.8.21
ghostscript - 8.01
perl - 5.8.0


заранее спасибо за помощь.

ananas ★★★★★
() автор топика
Ответ на: комментарий от cvasil

да. и из комстроки и как фильтр просто gs отрабатывает нормально.

замена system на fork+exec и прочие околозапускаемые извраты тоже пока результата не дали :(

ananas ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.