Lancer script via terminal avec import modul [resolu]

salut à tous.

jusqu’à maintenant j’utilisais IDLE pour écrire et exécuter mes scripts python 3, sur RPi_zero sous
Raspbian avec bureau. Et tous ce passe bien.

j’aimerai maintenant aller un peu plus loin et exécuter mes scripts via la console (avec ssh ou VNC)

Le problème est que je ne sais pas pourquoi de cette manière les modules que j’importe ne sont pas trouvé. ce qui me génère une erreur.

ce genre de script :

# -*- coding: utf-8 -*-

from midi import *
import RPi.GPIO as GPIO

print('end')

me génère ce genre d’erreur :

pi@raspberrypi:~ $ sudo python -i /home/pi/Desktop/t.py
Traceback (most recent call last):
  File "/home/pi/Desktop/t.py", line 3, in <module>
    from midi import *
ImportError: No module named midi
>>>

Pouvez-vous m’expliquer ce que je fais d’incorrect ?

Salut,j’ai fait quelques recherche et il me semble que tu devrai mettre from mido import *

Salut
Non :wink: ,mon modul s’appelle midi, de la librairie py-midi, mido est une autre librairie.
mon soucis est pas la lib elle meme, elle fonctionne si je passe par IDLE3.
mais si j’ouvre un terminal et que je lance mon script, le modul est introuvable
celui-ci ou un autre d’ailleurs…

A d’accord dsl pour le hs

Et ça ?Cela donne quoi ?
sudo pip3 install py-midi

bah ça installe la librairie lol.

Enfait je viens de comprendre je crois.
je tapais sudo python -i /home/pi/Desktop/t.py
et je ne sais pas pourquoi il utilisai certainement python 2.7, (je pensais que depuis un moment la priorité était donné a la dernier version de python)

avec sudo python3 -i /home/pi/Desktop/t.py tout est bon

merci pour ton aide :wink:

il est vrai qu’il faut toujours penser à tout bien préciser

Bonjour,
Dans les scripts python il faut utiliser les shebang;
#!/usr/bin/env python3

coding=UTF-8

pour un script dédié à python 3
et
#!/usr/bin/env python

coding=UTF-8

pour un script pyhon 2.7
tu rend ton script exécutable et tu peux le démarrer avec la commande : /home/pi/Desktop/t.py

Merci pour les précision :wink:

Le but suivant est de pouvoir démarrer le script automatiquement après le démarrage du pi.
je vais chercher un peu sur google je devrais trouver :wink:

Crontab:
MAILTO=""
@reboot /home/pi/Desktop/t.py**

Il y’a un tuto sur ça sur Raspberry-pi.fr

merci pour le lien, j’ai trouvé :wink:

Salut

Au début, j’ai cru que tu voulais taper le python directement dans la console ; la phrase est mal formulée :yum: (ou mal interprétée par moi)
Le problème de python étant les indentations, j’ai opté pour la solution sécurisée:
Je bosse sur Geany ou Thonny avec mon PC sous Linux puis j’injecte mon scriopt dans le Rpi en ssh avec un

scp /home/nabla/dossier-python/script-en-question.py pi@192.168.0.16:/home/pi/dossier-cible/

Ça permet d’éviter les erreurs à la « $£& » à cause de ses foutues indentations :wink:

Sinon, pour :

Tu as, en fait, 2 possibilités :
Passer par rc.local et/ou passer par l’ouverture de session graphique.
Si ton Rpi est en mode console = rc.local
Si ton Rpi est en mode graphique pour un affichage sans clavier ni souris, tu peux lancer un script au démarrage initial avec rc.local et un autre lors de l’ouverture de la session graphique en modifiant l’autostart ( sudo nano /etc/xdg/lxsession/LXDE-pi/autostart)

A noter que je n’utilise jamais la solution donnée par @Mik91390 … parce que … je ne pense à crontab que pour les actions à horaire ; merci @Mik91390 pour le rappel.
Par contre, je mettrais le « user » ; non ?

@reboot pi /home/pi/Desktop/t.py

++

Bonjour,
il ne faut pas mettre le user; car chaque user à son crontab, sudo crontab -e edit le crontab du root ; et crontab -e celui de l’ user en question.
Personnellement je crée un fichier crontab.txt, dans le quel je met mes commandes, je le sauvegarde, puis j’entre la commande crontab crontab.txt: https://fr.wikipedia.org/wiki/Cron

voici un exemple de crontab:
MAILTO=«  »
@reboot /home/michel/scripts/bash/Boot
@hourly /home/michel/scripts/bash/heure
2 * * * * /home/michel/scripts/py/iperf bouygues.iperf.fr

et surtout il est déconseillé d’ éditer directement le fichier: /etc/crontab

1 « J'aime »

Hello,

Un grand merci pour cette réponse explicite, claire et didactique.

J’avais bien retenu ça … mais … sans trop savoir pourquoi … alors … :relaxed:

L’édition directe des fichiers crontabs est fortement déconseillée, car lors de la commande crontab -e ou crontab cron.txt, il est appliqué des règles de vérifications du format du fichier.
En effet si le format n’est pas respecté, il y aurait possibilité que toute la programmation soit vérolée. Un beau bazard en prévision.

La méthode de @Mik91390 est celle que je recommande également. Passer par un fichier est également à mon avis la plus sûre, et c’est toujours celle que j’utilise personnellement.
On a la possibilité de garder sous la main le fichier crontab du coup en cas de migration quelle qu’elle soit, il suffit de relancer la commande crontab cron.txt.
Pour ma part, lorsque je souhaite modifier une crontab, je procède de cette sorte:

  • Récupérer la cron active
    $ crontab -l > cron.txt
  • Modifier le fichier cron.txt
  • Injecter le fichier modifié
    $ crontab cron.txt

amusez-vous bien

A+

Yes !
Merci @jelopo
Entre @Mik91390 et toi = j’ai du lourd en terme d’avis compétents = Je crois que je vais user de cette méthode … dès ce soir.
En effet, juste avant de poster, j’avais modifié mon crontab pour forcer mon Rpi3b+ (qui est sur batterie de secours de téléphone dans le jardin (sans réseau) à prendre des photos du nid d’un oiseau pour faire des timelapses) à s’éteindre à 19h00.
Ce soir, retour au crontab initial et essai de cette solution pour demain.

Bon, du coup, je crois que je dois modifier certains de mes tuto pour qu’ils soient plus pro :wink:

P.S. : @obs --> je passe le sujet en résolu ?

Oui tu peux mettre en résolu, même si j’ai pas compris tous ce qui a été dis ici lol.
merci