web-dev-qa-db-fra.com

Unbuffer a cessé de fonctionner il y a plusieurs mois

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?

4
Starman

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.

6
brezniczky