Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

sys.path différent en ssh et paramiko

+3 votes

Je me connecte en ssh avec putty sur mon robot et je demande le PYTHON PATH :

>>sys.path

> ['', '/home/poppy/dev/poppy-torso/software',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python27.zip',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python2.7',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python2.7/plat-linux2',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python2.7/lib-tk',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python2.7/lib-old',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python2.7/lib-dynload',
> '/home/poppy/.pyenv/versions/2.7.9/lib/python2.7/site-packages']

Je me connecte sur le même robot en utilisant les librairies Paramiko et j'éxécute un script qui renvoi le PYTHON PATH :

import sys
print sys.path

et là je n'ai pas du tout les mêmes résultats :

 ['/home/poppy/notebooks', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-arm-linux-gnueabihf', 
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7']\n"]

Ce qui explique que mes imports ne fonctionnent pas lorsque j'exécute un script à l'aide d'une commande ssh dans Paramiko.

Mais pourquoi donc un PYTHON PATH différent depuis Paramiko ???

demandé 24-Fev-2016 par jjehl (140 points)

Quasi certain que dans ton cas, paramiko ne load pas ton .bashrc / .bash_profile. Est-ce que tu peux tester cette commande:

bash -lc 'echo $PATH'

en te connectant avec paramiko et comparer ca avec ton $PATH sous putty?

1 Réponse

+2 votes

Putty :

poppy@dummy-poppy:~$ echo $PATH
/home/poppy/.pyenv/shims:/home/poppy/.pyenv/bin:/home/poppy/.pyenv/shims:/home/poppy/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Paramiko :

ssh.exec_command("bash -lc 'echo $PATH'")
[u'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games\n']

Et oui, c'est pas pareil. En fait, j'ai fini par comprendre que le problème venait de l’environnent et du fait que Paramiko allait chercher une autre version de Python dans /usr/bin alors que Putty va la chercher dans /home/poppy/.pyenv/...

Donc je force Paramiko à prendre la bonne version avec un lien absolu :

ssh.exec_command("/home/poppy/.pyenv/versions/2.7.9/bin/python test_simple.py 5")

et ça marche.

répondu 25-Fev-2016 par jjehl (140 points)

Approuve la réponse si c'est bon, ça pourra aider les autres si ils atterrissent ici.

...