Je veux émettre une barre de progression, mais comment puis-je récupérer la largeur du terminal dans Perl? p>
Une solution de noyau PERL serait préférable, car je n'ai pas accès à un compilateur, il suffit d'un Perl de 5,8,2% déjà installé. P>
4 Réponses :
Terme :: Taille :: Tout semble être ce que vous 're après. p>
Ne pas partie de Core Perl, mais toujours agréable de savoir
Il y a une version pure-perl. Vous ne devriez pas avoir besoin d'un compilateur pour l'installer.
@Dan: Oh ... je vais jeter un coup d'oeil alors :-)
La FAQ qui navire avec Perl a la réponse à cette question. Si vous exécutez Comment puis-je obtenir la taille de l'écran? strong> p>
Si vous avez perdoc -q "taille de l'écran" code>, vous obtiendrez ce qui suit:
Terme :: Readkey Code> MODULE INSTALLÉ À partir de CPAN, vous pouvez l'utiliser pour récupérer la largeur et la hauteur en caractères et en pixels: P>
require 'sys/ioctl.ph';
die "no TIOCGWINSZ" unless defined &TIOCGWINSZ;
open(TTY, "+</dev/tty") or die "No tty: $!";
unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
}
($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
print "(row,col) = ($row,$col)";
print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
print "\n";
Comment exécutons-nous h2ph code> comme indiqué par le message d'erreur:
ne peut pas localiser sys / ioctl.ph dans @inc (avez-vous exécuté H2PH?) Code>
@Steve: Alors, que se passe-t-il lorsque vous essayez d'exécuter H2PH code>?
@Ether: j'ai raté l'option -d code> de
H2PH code>. Maintenant, il est indiqué
ioctl.pl: ioctl tiocgwinsz (40007468: un appel système a reçu un paramètre qui n'est pas valide.) Code>
J'aimerais noter que le Tiocgwinsz a fait pas B> Travailler sur BSD, mais "Beaucoup" Les gens copient déjà cette "solution" car il ne semble pas nécessairement nécessiter des modules supplémentaires. S'il vous plaît l'éviter.
Cela ne fonctionnera pas dans un maquillage. Apparemment, il s'agit d'un bug d'utiliser ce module dans tout ce qui n'a pas de terminal de contrôle et, bien sûr, il faut contrôler le terminal. Dommage - je me demande s'il y a une autre façon de le faire fonctionner. (Modifier: Faire probablement les colonnes et lignes d'exportation de Makefile fonctionnera, mais ce serait bien s'il est essayé TPCT ou STTY TAILLE).
Si vous voulez faire une barre de progression, ne transpirez pas les détails. Utilisez l'un des nombreux Modules de barre de progression sur CPAN et être fait avec elle. < / p>
+1 pour une réponse niveau supérieur i>. Dommage que le terme :: ProgressBar a besoin d'aussi terme :: readkey :-(
Cela dépend évidemment de la plate-forme, mais une solution très simple qui fonctionne hors de la boîte sur Linux est la suivante:
my $width = `tput cols`;
Vous avez toujours accès à un compilateur. Il n'y a pas de loi qui dit que vous devez la compiler sur le même hôte.
[Sarcastique] Normalement oui ... mais pas ici. Comme tout le monde sait que Java & Perl peut simplement être développé sur n'importe quelle case, il n'est pas nécessaire de disposer du même environnement (architecture de lecture) sur la plate-forme Dev que la production ... [/ sarcastique]
Pourquoi le sarcasme? Je vous donne une réponse sérieuse. Vos systèmes de développement et de production ne comptent pas vraiment. Vous pouvez traverser une compilation à l'une d'entre elles. Vous êtes ici pour obtenir de l'aide et je vous ai donné de l'aide gratuite, alors ne vous chierez pas dessus.
@brian: J'en suis désolé depuis que je ne voulais pas être sarcastique sur vous, mais plus sur PPL, cela ne me donne pas accès à un compilateur qui cible l'architecture de production (Hey, je savais que tu étais sérieux, J'ai même + 1'd).