Je trouve la commande "unbuffer" très importante et utile, car j’exécute le code python et je ne pense pas pouvoir mettre quelque chose d’équivalent à fflush () partout.
J'avais l'habitude de bien l'utiliser: unbuffer python foo.py | tee filename.log
Il y a quelques mois, je ne suis pas sûr d'avoir autorisé Ubuntu 16.04 à mettre à jour automatiquement certains logiciels, qui ont alors cessé de fonctionner.
$ unbuffer
can't find package Expect
while executing
"package require Expect"
(file "/usr/bin/unbuffer" line 6)
J'ai essayé de modifier certains fichiers et de changer Expect
en minuscule expect
, mais cela n'a pas fonctionné.
J'ai essayé (il y a des mois) en utilisant des outils apt-get pour désinstaller et réinstaller Expect, mais en vain. Je suis surpris de ne pas pouvoir google et trouver d'autres personnes se plaindre que cela ne fonctionne pas.
Je viens de l'essayer sur 18.04 Ubuntu d'un ami. Il ne l'a jamais utilisé, il l'a téléchargé avec apt-get et reçoit le même message d'échec. Toute aide appréciée.
Merci @pynexj pour la suggestion de cat/usr/bin/unbuffer:
#!/bin/sh
# -*- tcl -*-
# The next line is executed by /bin/sh, but not tcl \
exec tclsh8.6 "$0" ${1+"$@"}
package require expect
# -*- tcl -*-
# Description: unbuffer stdout of a program
# Author: Don Libes, NIST
if {[string compare [lindex $argv 0] "-p"] == 0} {
# pipeline
set stty_init "-echo"
eval [list spawn -noecho] [lrange $argv 1 end]
close_on_eof -i $user_spawn_id 0
interact {
eof {
# flush remaining output from child
expect -timeout 1 -re .+
return
}
}
} else {
set stty_init "-opost"
set timeout -1
eval [list spawn -noecho] $argv
expect
exit [lindex [wait] 3]
}
J'utilise conda sur cette machine, mais j'exécute ces tests dans un terminal où je n'ai pas fait de source activate
. Le premier élément de mon chemin est/home/myusername/anaconda3/bin, si cela compte.
$ apt list --installed | grep -i expect
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
expect/xenial,now 5.45-7 AMD64 [installed]
python3-pexpect/xenial,xenial,now 4.0.1-1 all [installed]
tcl-expect/xenial,now 5.45-7 AMD64 [installed,automatic]
$ locate '*expect*pkgIndex.tcl'
/usr/lib/tcltk/x86_64-linux-gnu/expect5.45/pkgIndex.tcl
Merci @glenn jackman, j'ai constaté que mon tclsh
est dans ~/anaconda3/bin/tclsh et pointe vers tclsh8.6 Je suppose que cela signifie qu'il a été installé dans le cadre de l'installation de mon conda. Comme indiqué ci-dessus, anaconda3/bin est au sommet de mon chemin. Je n'ai rien construit moi-même.
Savons-nous si la 8.6 est ancienne ou nouvelle? Devrais-je essayer de faire une mise à jour d'apt-get sur tcl ou tclsh, en dehors de conda stuff, et voir si cela aide?
Je crois avoir rencontré exactement le même problème, principalement causé par l'installation d'Anaconda. On dirait que mon système s'est tourné vers ce qu'Anaconda a apporté avec lui-même, plutôt que ce qui avait été installé il y a bien longtemps - et est toujours présent.
Conformément à https://anaconda.org/Eumetsat/expect , il me suffisait d'émettre un
conda install -c eumetsat expect
remettre les choses en ordre.