"Print" qui n'apparaissent pas en ssh

Bonjour à tous et merci à ceux qui m’aideront.

Voici mon problème, j’ai un script python sur un raspberry distant, script ponctué de print. Exécuter en local le script fonctionne normalement.

Je me connecte d’un autre poste via le terminal de debian en ssh et ça marche toujours très bien.

Par contre je crés un script pour automatiser la connections ssh dans une nouvelle fenêtre de terminal, je rentre mon mots de passe, mon script ce lance bien, mais dans cette nouvelle fenêtre je n’ai pas les retour de print…

Alors que quand je lance ce même script toujours via ssh mais dans une fenêtre terminal que j’ai ouverte a la main, pas de problème…

Je suis a court d’idées…

Merci

Ce n’est pas d’une clarté limpide votre histoire. Vous utilisez le terme script pour deux choses très différentes et sans le contenu de ces fameux scripts il est quasiment impossible de comprendre ce qui se passe. En particulier celui qui crée la connexion ssh

A titre de test :

cat /tmp/ppy.py
#! /usr/bin/env python

print("par ssh\n")
fp2@debpacha:~$ chmod +x /tmp/ppy.py
fp2@debpacha:~$ /tmp/ppy.py
par ssh

fp2@debpacha:~$ ssh localhost /tmp/ppy.py
par ssh

fp2@debpacha:~$ 

Pourquoi faire simple quand on peut faire compliqué ?

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac

« Je préfère le vin d’ici à l’au-delà »
Pierre Dac

Bonjour,

Le script qui crée la connexion :

#!/bin/Bash

echo « run »
Sleep 5
lxterminal -e ssh user@xxx.xxx.x.xx python test.py

Rien d’autre …

Ajoutez l’option -X (X11 forwarding)

Une autre solution consiste à copier le script test.py rendu exécutable avec la bonne en-tête pour préciser l’interpréteur python

chmod +x test.py
scp -p test.py user@dest:/tmp
ssh user@dest /tmp/test.py

pas vraiment besoin d’ouvrir un nouveau terminal graphique.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« On ne perd pas son temps en aiguisant ses outils. »
Proverbe français

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

  • l’option -X ne change rien. Pas de print.

  • Envoyer le test.py via scp n’affiche pas les retours de print non plus. J’ai besoin que ce soit envoyé dans une autre fenètre de terminal, à terme se sera plusieurs connexions ssh qui seront établie et j tiens à voir les retours.

Pour infos l’entête de mon fichier python sur la machine distante est:

#!/usr/bin/python

Pour plus de précision à nouveau, en local, j’ouvre un terminal, je me connecte en ssh à la machine distante, le lance mon test.py… Je vois bien mes retours print.
Par contre mon scirpt du dessus qui fait pour moi la même chose mais automatisé et dans un nouveau terminal, je ne vois pas les prints…

Je suis passé a cote de quelque choses ?

Pourquoi ne pas utiliser un screen pour ça, tu n’aurait qu’a te rattacher à ton screen pour consulter tes prints.
Le mieux serait tout de même d’envoyer tes print dans la stdout, mais si tu lance plusieurs scripts simultanément ça va être le bordel pour trier tes sorties :wink:

Tu n’as perdu avec la stdout… De ce que j’ai lus c’est pour redirigé la sorti de l’écran vers un fichier, c’est ca ?

Bon j’ai contourné le problème…

Plutot que des print, j’ai remplacé par des os.system(« echo… ») et plus de problème…

Merci.

Non et non ! le script bash ne fait pas la même chose que ce que vous faites à la main.
Comme vous combinez des commandes qui lancent une autre commande

  • ssh <user@>host cmmande…
  • lxterminal -e commande;;;
    l’ordre dans lequel vous combinez est très important

Voici un exemple

cat /tmp/ppy.py
#! /usr/bin/env python

import getpass

print( getpass.getuser() )

raw_input("press any key")
ssh -X localhost "xterm -e /tmp/ppy.py"

et vous voyez que j’ai été obligé d’ajouter un raw_input pour bloquer la fermeture intempestive de la fenêtre graphique. C’est une solution bâtarde car elle suppose que vous avez un émulateur de terminal sur la machine distante.

Comme l’a remarqué très justement @Clochette il est beaucoup plus judicieux d’utiliser un multiplexeur de terminal texte (programme screen ou tmux).
Si c’est le raspberry qui tourne H24, il est plus simple d’installer tmux sur ce système, vous pourrez retrouvez vos sessions de la manière suivante

ssh user@pi
# retrouver le numéro de la session éventuelle
tmux list-sessions
tmux #  si pas de session  trouvée
tmux attach-session -t <num>  # sinon
....
# terminé : on détache (tous les onglets d'un coup )
<prefix> d #  prefix  : Ctrl B  par défaut
# on se retrouve dans le shell  de connexion sur le pi
exit #  on ferme la connexion ssh

Les sessions tmux sont persistantes et si votre serveur n’est pas redémarré souvent, vous pouvez retrouver ce que vous avez fait il y a un ou plusieurs mois :laughing:

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« L’arbre tombe toujours du côté où il penche. »
Proverbe français

Non et non ! le script bash ne fait pas la même chose que ce que vous faites à la main.

Je le soupçonne bien sinon je n’aurais pas de problème…

raw_input(« press any key »)

oui effectivement c’est un problème.

La proposition de clochette avec screen m’interresé bien. Hier soir j’ai installé screen pour essaie. J’ai créé plusieurs screen et rencontré des difficultés lorsque je voulais tous les afficher dans un terminal scindé. Pas moyen de ce rattaché a certain mais pas a d’autre…
Je n’ai pas chercher très loin… désinstallé…

Je ferrai des essaies avec tmux dans la journée.

Merci.

Question con, es-tu sûr que ton script s’exécute bien par SSH, bien que les print n’affichent rien ?

Oui pas de soucis je me renvoie des fichier issu de ce python via scp, et tout arrive bien.