2015-05-12 13 views
13

Ogni volta che provo a richiamare un comando che non esiste ($ a, ad esempio) nella console (/ bin/bash) l'interprete attende a lungo. E quando lo interrompo (^ C), ricevo un messaggio di errore dall'interprete Python. Invece, mi aspetto che mi dica che il comando non è stato riconosciuto. Perché sta succedendo?I comandi non riconosciuti in bash vengono catturati dall'interprete python

$ a 
^C 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/encodings/__init__.py", line 32, in <module> 
[email protected]:/home/antonio/workspace/biz_index#  from encodings import aliases 
    File "/usr/lib/python2.7/encodings/aliases.py", line 17, in <module> 
    """ 
KeyboardInterrupt 
^C 
+5

Cosa c'è nel tuo "PERCORSO"? –

+3

Qual è il risultato di 'which a'? –

+2

Si verifica solo in una determinata directory o ovunque? È probabile che tu abbia involontariamente oscurato un pacchetto Python integrato con un po 'del tuo codice. –

risposta

7

Se l'impostazione PATH="" lo corregge, qualcosa, da qualche parte, ombreggia un pacchetto python che viene chiamato dal pacchetto command-not-found. Recentemente ho fatto questo io stesso scrivendo una sceneggiatura chiamata struct.py. È necessario passare attraverso tutte le directory nel percorso, vale a dire

/home/antonio/.local/bin 
/home/antonio/.local/bin 
/usr/local/sbin 
/usr/local/bin‌​ 
/usr/sbin 
/usr/bin 
/sbin 
/bin 
/usr/games 
/usr/local/games 

e cercare i file .py lì. Uno di questi condivide un nome con uno dei pacchetti Python incorporati. In alternativa, puoi rimuovere le directory dal tuo PATH e aggiungerle di nuovo fino a quando non scopri quale di esse si rompe. Una volta trovato, è necessario eliminarlo o rinominarlo.

Ecco un guscio di one-liner di farlo per voi:

for dir in $(echo $PATH | tr ":" "\n"); do ls -1 $dir | grep "[.]py"; done 

è possibile verificare questo fuori nel proprio guscio provando il seguente (ricreando il mio errore da pochi giorni fa):

echo 'print("HELLO WORLD")' >> struct.py 

Ora nel mio guscio, rimanendo nella directory corrente, vedo:

➜ client git:(master) ✗ a 
HELLO WORLD 
zsh: command not found: a 

Presumibilmente lo script Python che sta facendo l'ombra nel tuo caso sta facendo qualcosa di più dispendioso rispetto alla semplice stampa di "CIAO MONDO", da qui l'impiccagione.

16

Sei su una macchina Ubuntu? Ubuntu ha un command-not-found package che è implementato in python, potresti averlo interrotto.

Nel percorso, potrebbe esserci uno script con lo stesso nome di uno chiamato dal pacchetto command-not-found. Se c'è, questo script è probabilmente quello che fa l'impiccagione. Per stampare il tuo percorso in modo leggibile, esegui echo $PATH | tr -s ':' '\n'.

+0

Sì, è Ubuntu. Come posso aggiustarlo, allora? – AntonioRomero

+0

@AntonioRomero Sono d'accordo che la mia risposta non risolva l'impiccagione. Indagando mentre parliamo ... – EvenLisle

Problemi correlati