Dans amc/AMC-perl/AMC/Print/cupslp.pm serait-il possible de tenter lpstat -a en cas d'échec de lpstat -e ? (Feature #688)
Description
Au commit git:43a83e09, dans printer_list()
, lpstat -a
est remplacé par lpstat -e
et cela fonctionne correctement avec les versions récentes de macOS (au moins 10.15 et 10.14). Par contre avec des versions plus anciennes de macOS (au moins 10.12 et 10.11) la version système de cups est plus ancienne est ne connait pas l'option -e
.
Serait-il possible de revenir à l'ancien fonctionnement basé sur lpstat -a
en cas d'échec de lpstat -e
pour que cela fonctionne avec les versions plus anciennes de macOS ?
Cela pourrait être quelque chose du genre (je ne suis pas un spécialiste de PERL).
sub printers_list { my ($self) = @_; my @list = (); if(open( PL, "-|", "lpstat", "-e" )) { while (<PL>) { chomp; push @list, { name => $_, description => "" }; } } else { open(PL,"-|","lpstat","-a") or die "Can't exec lpstat: $!"; while(<PL>) { push @list,{name=>$1,description=>$1} if(/^([^\s]+)\s+accept/); } } close PL; return (''); }
History
Updated by Joël Brogniart almost 5 years ago
Bon ma solution était vraiment trop triviale et ne fonctionnait pas du tout. Du coup il a fallu que j'apprenne un peu de PERL pour avoir quelque chose qui fonctionne.
La version ci-dessous de la fonction marche chez moi pour macOS 10.15 et 10.12 avec AMC au commit git:fc646f9d (le dernier à ce jour). Est-il envisageable que la nouvelle version soit adoptée si elle fonctionne aussi sur les autres plateformes ?
sub printers_list { my ($self) = @_; my @list = (); # Verify if lpstat -e output to stderr open( PL, "-|", "lpstat -e 2>&1 1>/dev/null" ) or die "Can't exec lpstat: $!"; my $err = <PL>; close PL; if($err) { # lpstat -e outputted to stderr so try lpstat -a open(PL,"-|","lpstat","-a") or die "Can't exec lpstat: $!"; while(<PL>) { push @list,{name=>$1,description=>$1} if(/^([^\s]+)\s+accept/); } close PL; } else { # lpstat -e outputted nothing to stderr so use it open( PL, "-|", "lpstat", "-e" ) or die "Can't exec lpstat: $!"; while (<PL>) { chomp; push @list, { name => $_, description => "" }; } close PL; } return(@list); }
Pour rappel, le but de cette version de la fonction est de fonctionner avec une version de CUPS récente qui comprend l'option "-e" et des versions anciennes qui ne comprennent pas cette option. La version actuelle de la fonction empêche l'impression sur les anciennes version de CUPS.