Installation de Visual Studio Code sous Debian 10 Buster

Visual Studio Code est un éditeur de code source développé par Microsoft, avec la particularité d’être open source. Il est disponible pour Windows, Linux et Mac OS X.

Depuis le site : https://code.visualstudio.com/

Cliquez sur .deb Debian, Ubuntu

Cochez Enregistrer le fichier.

Cliquez sur [OK]

Depuis un terminal en administrateur root (su), rendez-vous dans votre dossier Téléchargements (dans mon cas mon dossier utilisateur se nomme dominique) :

cd /home/dominique/Téléchargements/

Si vous voulez voir les fichiers se trouvant dans le dossier utilisez la commande ls (le nom du fichier télécharger peut changer).

Installer le paquet :

dpkg -i code_1.36.1-1562627527_amd64.deb

Si vous rencontrez des problèmes avec la commande dpkg liés à la variable PATH (messages d’erreur), consultez l’article suivant :

Sous Debian 10 dpkg -i problèmes avec la variable PATH

Sous Debian 10 dpkg -i problèmes avec la variable PATH

Sous Debian 10, j’ai voulu exécuter une commande dpkg -i pour installer un paquet en administrateur root et j’ai eu les messages suivants :

dpkg: avertissement: « ldconfig » introuvable dans la variable PATH ou non exécutable

dpkg: avertissement: « start-stop-daemon » introuvable dans la variable PATH ou non exécutable

dpkg: erreur: 2 programmes attendus non trouvés dans la variable PATH ou non exécutables

Note : la variable PATH du superutilisateur doit normalement contenir /usr/local/sbin, /usr/sbin et /sbin

La solution pour la durée de la session

Pour ajouter un répertoire au Path sur Linux, il suffit d’utiliser la commande export :

export PATH=$PATH:/chemin/vers/le/repertoire

J’ai exécuté les commandes suivantes :

export PATH=$PATH:/usr/local/sbin
export PATH=$PATH:/usr/sbin
export PATH=$PATH:/sbin

Pour vérifier le résultat :

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin

Pour modifier PATH de façon permanente

Voir l’article :

Recherche des fichiers sous Linux et la variable PATH


Retrouvez plus d’informations sur la page consacrée au Shell Linux :

Le shell

Listes et boucles avec Python

J’utilise Debian 10 Buster et Python 3.7.3.

Pour illustrer l’utilisation d’une boucle for avec une liste, je vous propose la fonction suivante que j’ai réalisée. Au passage, on voit également les instructions conditionnelles avec if et else, mais ce n’est pas le sujet principal pour le moment.

Voilà le code :

def maj_min():

    liste_boutons = [Mon_bouton1,Mon_bouton2,Mon_bouton3,Mon_bouton4,Mon_bouton5,Mon_bouton6,Mon_bouton7]

    if Mon_bouton10["text"] == "Maj":

        Mon_bouton10["text"] = "Min"

        for bouton in liste_boutons:

            bouton["text"] = bouton["text"].upper()

    else:

        Mon_bouton10["text"] = "Maj"

        for bouton in liste_boutons:

            bouton["text"] = bouton["text"].lower()

Dans le programme, j’ai utilisé tkinter pour créer une interface graphique. J’ai donc des boutons. Le but de ma procédure est, lorsque je clique sur un bouton prévu à cet effet (Mon_bouton10), que le texte d’une série de boutons passe de minuscule à majuscule et inversement.

Les fonctions upper() pour majuscules et lower() pour minuscules.

J’ai donc créé une liste nommée liste_boutons où j’ai énuméré les boutons concernés.

Vous remarquerez mes deux boucles for qui traitent tous les boutons de la liste, pour dans un cas mettre leurs textes en majuscules et dans l’autre en minuscule.

Une dernière chose, l’indentation, vous remarquerez que le code est parfois décalé vers la droite (quatre espaces ou une tabulation). Cela permet de déterminer le bloc de code traité par les instructions if, else, ou for. Cette disposition du code est une obligation en Python.

Un dernier conseil, n’oubliez pas les : à la fin de certaines lignes.

Utilisation du presse-papiers depuis Python

J’utilise Debian 10 Buster et Python 3.7.3

L’utilisation du presse-papiers dans un programme Python permet d’effectuer des copier-coller.

J’ai décidé d’utiliser la bibliothèque pyperclip.

Les prérequis :

Installation du paquet pip pour le presse-papiers depuis le terminal en administrateur (root).

pip3 install pyperclip

Si cela ne fonctionne pas.

Installation des paquets nécessaires à la mise en place des bibliothèques pour Python 3, en administrateur (root pour Debian ou sudo pour Ubuntu, Mint). Pip est un gestionnaire de paquets :

apt-get install python-pip python3-pip

Installation du paquet Linux pour l’usage du presse-papiers depuis le terminal en administrateur (root) :

apt-get install xclip

Dans le script Python, on doit importer la bibliothèque pyperclip :

import pyperclip

Exemple d’utilisation :

pyperclip.copy(copie) #Copier dans le presse-papiers le contenu de la variable copie.

Plus d’informations sur le WEB :

https://pypi.org/project/pyperclip/

Créer une interface graphique sous Debian en Python avec Tkinter

J’utilise Debian 10 Buster et Python 3.7.3.

Le but ici est de créer une interface graphique pour une application en Python. Dans mon cas, il s’agit de saisir des données.

Prérequis :

Pour Python 3 , depuis un terminal en administrateur root :

apt-get install python3-tk

Pour importer la bibliothèque dans votre programme :

from tkinter import *


Exemple avec la méthode pack

On a déjà vu comment lire ou enregistrer des variables, depuis ou vers un fichier. Ici, on voit comment créer une interface graphique avec Tkinter pour saisir des valeurs dans des variables.

Mon interface graphique sous Debian

Si votre application est graphique ou que votre code fait une tâche de fond, vous pouvez renommer votre fichier avec l’extension .pyw (plutôt que .py) pour dissimuler le Shell. Si vous nommer mon script Python en .py, vous verrez le résultat de votre saisie dans le Shell.

À noter que l’on peut saisir des valeurs dans des variables sans interface graphique avec la fonction input().

Je débute en Python, si vous avez des idées pour améliorer le code, je suis à votre écoute. Tous les conseils sont les biens venus.

Je pense que l’on pourrait par exemple, améliorer la disposition des widgets.

Voici mon code :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-

from tkinter import * #On importe l'ensemble du module Tkinter

def enregister(): #Ma fonction
    serveursmb = Serveur_Entry.get() # lecture du contenu du widget "Serveur_Entry"
    partagesmb = Partage_Entry.get() # lecture du contenu du widget "Partage_Entry"
    utilisateur = Utilisateur_Entry.get() # lecture du contenu du widget "Utilisateur_Entry"
    mot_de_passe = Mot_de_passe_Entry.get() # lecture du contenu du widget "Mot_de_passe_Entry"
    domaine = Domaine_Entry.get() # lecture du contenu du widget "Domaine_Entry"
    fichier_diaporama = Fichier_du_diaporama_Entry.get() # lecture du contenu du widget "Fichier_du_diaporama_Entry"
    print(serveursmb) #Affichage des données saisies dans le terminal
    print(partagesmb)
    print(utilisateur)
    print(mot_de_passe)
    print(domaine)
    print(fichier_diaporama)
    Fenetre.destroy() #Fermeture de la fenêtre

#Mon programme
Fenetre = Tk() #création de la fenêtre, avec un nom de votre choix Fenetre
Fenetre.title('Paramètres Diaporama') #Titre de la fenêtre

Serveur_Label= Label(Fenetre, text = 'Votre serveur :') #Un label pour afficher du texte
Serveur_Entry= Entry(Fenetre) #On définit l'objet Entry (zone de saisie) qui porte le nom Serveur_Entry
Partage_Label= Label(Fenetre, text = 'Votre partage réseau :')
Partage_Entry= Entry(Fenetre) 
Utilisateur_Label= Label(Fenetre, text = 'Votre utilisateur :')
Utilisateur_Entry= Entry(Fenetre)
Mot_de_passe_Label= Label(Fenetre, text = 'Votre mot de passe :')
Mot_de_passe_Entry= Entry(Fenetre)
Domaine_Label= Label(Fenetre, text = 'Votre nom de domaine:')
Domaine_Entry= Entry(Fenetre)
Fichier_du_diaporama_Label= Label(Fenetre, text = 'Votre fichier de diaporama :')
Fichier_du_diaporama_Entry= Entry(Fenetre)
Mon_bouton = Button(Fenetre, text =' Enregistrer', command=enregister) #Mon bouton - Un clic et on lance la fonction enregistrer

Serveur_Label.pack() # insère les Widgets dans la fenêtre
Serveur_Entry.pack()
Partage_Label.pack()
Partage_Entry.pack() 
Utilisateur_Label.pack()
Utilisateur_Entry.pack()
Mot_de_passe_Label.pack()
Mot_de_passe_Entry.pack()
Domaine_Label.pack()
Domaine_Entry.pack()
Fichier_du_diaporama_Label.pack()
Fichier_du_diaporama_Entry.pack()
Mon_bouton.pack()

affichage = Label(Fenetre, width=50)
affichage.pack()

Fenetre.mainloop() # lance la boucle principale

Exemple avec la méthode grid

Un nouvel exemple où l’on utilise la méthode grid ce qui permet de mieux disposer les widgets.

Mon interface graphique sous Debian

Voici mon code :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
from tkinter import *
Fenetre = Tk() #création de la fenêtre, avec un nom de votre choix Fenetre
Fenetre.title('Paramètres Diaporama') #Titre de la fenêtre
Fenetre.geometry("420x170") # On définit la taille de la fenêtre
#Création d'un interface graphique avec grid
#Remplacer les méthodes pack() par les méthodes grid() 
Serveur_Label= Label(Fenetre, text = 'Votre serveur :') #Un label pour afficher du texte
Serveur_Label.grid(row=0)
Serveur_Entry= Entry(Fenetre) #On définit l'objet Entry (zone de saisie) qui porte le nom Serveur_Entry
Serveur_Entry.grid(row=0,column=1,ipadx=30) # ipadx=30 pour créer 10 pixels de plus horizontalement
Partage_Label= Label(Fenetre, text = 'Votre partage réseau :')
Partage_Label.grid(row=1,column=0)
Partage_Entry= Entry(Fenetre) 
Partage_Entry.grid(row=1,column=1,ipadx=30)
Utilisateur_Label= Label(Fenetre, text = 'Votre utilisateur :')
Utilisateur_Label.grid(row=2,column=0)
Utilisateur_Entry= Entry(Fenetre)
Utilisateur_Entry.grid(row=2,column=1,ipadx=30)
Mot_de_passe_Label= Label(Fenetre, text = 'Votre mot de passe :')
Mot_de_passe_Label.grid(row=3,column=0)
Mot_de_passe_Entry= Entry(Fenetre)
Mot_de_passe_Entry.grid(row=3,column=1,ipadx=30)
Domaine_Label= Label(Fenetre, text = 'Votre nom de domaine:')
Domaine_Label.grid(row=4,column=0)
Domaine_Entry= Entry(Fenetre)
Domaine_Entry.grid(row=4,column=1,ipadx=30)
Fichier_du_diaporama_Label= Label(Fenetre, text = 'Votre fichier de diaporama :')
Fichier_du_diaporama_Label.grid(row=5,column=0)
Fichier_du_diaporama_Entry= Entry(Fenetre)
Fichier_du_diaporama_Entry.grid(row=5,column=1,ipadx=30)
Mon_bouton = Button(Fenetre, text =' Enregistrer')
Mon_bouton.grid(row=6,column=1,ipadx=40)
Fenetre.mainloop() # lance la boucle principale

Exemple avec la méthode place

La méthode place permet de placer les widgets sur les axes de coordonnées.

En exemple, je me suis inspiré de l’interface du programme Lexibar espagnol très apprécié de nos professeurs de collège.

Mon interface graphique sous Debian

Voici mon code :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
from tkinter import *

Fenetre = Tk() #Création de la fenêtre, avec un nom de votre choix Fenetre
Fenetre.title('Lexidom') #Titre de la fenêtre
Fenetre.geometry("340x60") #On définit la taille de la fenêtre
#Création et affichage des boutons
Mon_bouton1 = Button(Fenetre, text = 'á', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton1.place (x = 0, y = 3)
Mon_bouton2 = Button(Fenetre, text = 'é', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton2.place (x = 30, y = 3)
Mon_bouton3 = Button(Fenetre, text = 'í', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton3.place (x = 60, y = 3)

Mon_bouton4 = Button(Fenetre, text = 'ó', width = 2, height = 2, bg = 'yellow', font = 'bold')
Mon_bouton4.place (x = 90, y = 3)
Mon_bouton5 = Button(Fenetre, text = 'ú', width = 2, height = 2, bg = 'yellow', font = 'bold')
Mon_bouton5.place (x = 120, y = 3)
Mon_bouton6 = Button(Fenetre, text = 'ü', width = 2, height = 2, bg = 'yellow', font = 'bold')
Mon_bouton6.place (x = 150, y = 3)

Mon_bouton7 = Button(Fenetre, text = 'ñ', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton7.place (x = 180, y = 3)
Mon_bouton8 = Button(Fenetre, text = '¿', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton8.place (x = 210, y = 3)
Mon_bouton9 = Button(Fenetre, text = '¡', width = 2, height = 2, bg = "red", fg = 'white', font = 'bold')
Mon_bouton9.place (x = 240, y = 3)

Mon_bouton10 = Button(Fenetre, text ='Maj/Min', width = 8, height = 3)
Mon_bouton10.place (x = 270, y = 3)

Fenetre.mainloop() # lance la boucle principale

Plus d’informations sur la programmation Python/Tkinter :

https://fr.wikibooks.org/wiki/Programmation_Python/Tkinter

Sauvegarder vos variables dans un fichier avec Python

J’utilise Debian 10 Buster et Python 3.7.3

Pour sauvegarder mes variables dans un fichier, j’utilise ici le module pickle. L’ordre de sauvegarde et de restauration doit être identique.

Le fichier peut être ouvert de différentes façons :

‘r’ Ouvrir le fichier en lecture seule (défaut).

‘w’ Ouvrir en écriture. Écrase le fichier existant.

‘x’ Ouvrir en écriture si et seulement si le fichier n’existe pas déjà.

‘a’ Ouvrir en écriture. Ajoute au fichier existant.

‘b’ Mode binaire.

‘t’ Mode texte (défaut).

Dans mes exemples, j’utilise ‘wb’ et ‘rb’

Exemple de sauvegarde des variables dans un fichier :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-

import pickle
#Enregistrer mes variables sous forme d'une liste dans un fichier
#Initialisation des variables
serveursmb = "PC-DOM"
partagesmb = "Partage-Diaporama"
utilisateur = "dominique"
mot_de_passe = "motdepasse"
domaine = "WORKGROUP"
fichier_diaporama = "Diaporama.odp"

#Enregistrement des variables dans le fichier
variables = [serveursmb, partagesmb, utilisateur, mot_de_passe, domaine, fichier_diaporama]
fichierSauvegarde = open("diaporamaini","wb")
pickle.dump(variables, fichierSauvegarde)
fichierSauvegarde.close()

Exemple de récupération de mes variables depuis un fichier. Au préalable, je teste que le fichier existe bien :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-

import pickle
import os.path

fichierini = "diaporamaini"

#Ouverture du fichier si il existe et récupération de la liste
if os.path.isfile(fichierini):
    fichierSauvegarde = open(fichierini,"rb")
    variables = pickle.load(fichierSauvegarde)
    fichierSauvegarde.close()

    #Affichage de la liste
    print(variables)

    #récupération des données dans les variables
    serveursmb = variables[0]
    partagesmb = variables[1]
    utilisateur = variables[2]
    mot_de_passe = variables[3]
    domaine = variables[4]
    fichier_diaporama = variables[5]

    #Affichage des variables
    print("Serveur : ", serveursmb)
    print("Partage : ", partagesmb) 
    print("Utilisateur : ",utilisateur)
    print("Mot de passe : ", mot_de_passe)
    print("Domaine : ", domaine)
    print("Fichier du diaporama : ", fichier_diaporama)
else:
    #Le fichier n'existe pas
    print("Fichier " + fichierini + " non trouvé")

Plus d’informations sur le WEB :

https://python.antoinepernot.fr/cours.php?course=chap5

Programmer en Python sous Debian

Versions de Python et Idle

J’utilise Debian 10 Buster et Python 3.7.3 (cette version de Python étant déjà installée).

Vous trouverez ici les bases pour réaliser un script en Python et l’exécuter.

Pour voir les versions de Python installées depuis un terminal :

 python --version
 Python 2.7.16
 python3 --version
 Python 3.7.3 

Pour installer Idle, l’éditeur de base pour Python (ici la version 3.7) depuis un terminal en administrateur root :

apt-get install idle-python3.7

Sublime Text

Sous Debian, pour éditer mon fichier, je peux également utiliser Sublime Text.

https://www.sublimetext.com/

Pour installer Sublime Text, en administrateur root.

Installation de la clé GPG :

wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add –
apt-get install apt-transport-https

Sources pour la version stable :

echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list

Mise à jour des sources apt :

apt-get update

Installation de Sublime Text :

apt-get install sublime-text

Configuration de Sublime Text pour Python.

Depuis le menu View ==> Syntax, sélectionnez Python.

On peut également installer Visual Studio Code. C’est un éditeur de code source développé par Microsoft, avec la particularité d’être open source. Il est disponible pour Windows, Linux et Mac OS X.

Installation de Visual Studio Code sous Debian 10 Buster


Entête

Entête de mon fichier Python :

#!/usr/bin/env python3.7

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

Pour exécuter le fichier

Pour que mon fichier Python .py soit exécutable, depuis le terminal :

chmod +x mon_fichier_python.py

Pour exécuter mon fichier Python depuis le dossier où il se trouve dans un terminal :

./mon_fichier_python.py

Les bibliothèques

Pour installer une bibliothèque externe pour Python 3.

Installation des paquets nécessaires à la mise en place des bibliothèques pour Python 3, en administrateur (root pour Debian ou sudo pour Ubuntu, Mint). Pip est un gestionnaire de paquets :

apt-get install python-pip python3-pip

Installation de la bibliothèque pour Python 3 avec pip :

pip3 install ma_bibliotheque

Vous trouverez un exemple ici :

https://artheodoc.wordpress.com/2019/07/18/client-samba-avec-python/


Mode interactif

Pour utiliser Python en mode interactif depuis un terminal :

dominique@debian-10:~$ python3

Python 3.7.3 (default, Apr  3 2019, 05:39:12)

[GCC 8.3.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> exit()

Pour utiliser Python 3.7.3 en mode interactif sous Debian 10, tapez python3 dans un terminal.

Pour quitter le mode interactif, tapez exit() dans le terminal.


Interfaces graphiques avec Tkinter

Création d’interfaces graphiques.

Pour créer des interfaces graphiques avec Tkinter, pour Python 3 vous devez installer le paquet suivant depuis un terminal en administrateur root :

apt-get install python3-tk

Pour importer la bibliothèque dans votre programme :

from tkinter import *

Voir l’article :

Créer une interface graphique sous Debian en Python avec Tkinter


Vous trouverez sur ce site des exemples de scripts en Python, à vous de réaliser les vôtres.

Les fonctions avec Python

J’utilise Debian 10 Buster et Python 3.7.3.

Pour illustrer l’utilisation des fonctions avec Python, je me suis basé sur l’utilisation d’un client Samba vu plus tôt (avec installation d’une bibliothèque tierce) :

https://artheodoc.wordpress.com/2019/07/18/client-samba-avec-python/

Je saisis le code de la fonction au début de mon fichier .py. Le programme proprement dit débute plus loin.

La fonction débute par le mot clé def. Le bloc de code qui suit est indenté, décalé vers la droite de quatre espaces ou d’une tabulation.

Ma fonction se termine par le mot clé return qui permet de renvoyer des informations. J’ai dû le mettre à la fin.

Comme vous le verrez dans l’exemple qui suit, je transmets des arguments à la fonction.

Voici le code de ma fonction :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
import smbclient

#Initialisation des variables
serveursmb = "PC-DOM"
partagesmb = "Partage-Diaporama"
utilisateur = "dominique"
mot_de_passe = "motdepasse"
domaine = "WORKGROUP"
fichier_diaporama = "Diaporama.odp"

#Fonction Telechargement_smb
def Telechargement_smb(server, share, username, password, domain, diaporama):
    smb = smbclient.SambaClient(server, share, username, password, domain)
    #Afficher les fichiers contenus dans le dossier partagé
    Fichiers_dans_Partage = smb.listdir("/")
    print(Fichiers_dans_Partage)
    '''Pour télécharger le fichier distant \\PC-DOM\Partage-Diaporama\Diaporama.odp
    vers vers le dossier courant - chemin absolu dans mon cas /home/Dominique/Documents/Diaporama.odp'''
    local_path = "./" + diaporama
    smb.download(diaporama, local_path)
    #Afficher des informations sur le fichier
    informations = smb.info(diaporama)
    return informations #Les informations renvoyées par la fonction - Je positionne le return à la fin de la fonction

#Le programme
Informations_Diaporama = Telechargement_smb(serveursmb, partagesmb, utilisateur, mot_de_passe, domaine, fichier_diaporama) #Exécution de la fonction
print(Informations_Diaporama)

À suivre…

Les commandes Shell Linux depuis Python

J’utilise Debian 10 Buster et Python 3.7.3

Mon but ici est d’exécuter des commandes Shell Linux depuis un script Python et si nécessaire de récupérer le résultat d’une commande dans une variable.

Dans mon exemple de programme en Python, je récupère le PID d’un processus Linux (celui de LibreOffice) dans une variable, par la suite, j’utilise ce paramètre dans une commande Shell Linux kill pour tuer l’application.

Si vous avez des suggestions d’améliorations ou une autre façon de procéder, je suis à votre écoute, rien n’est figé dans le marbre.

Mon exemple :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
# Obtenir le pid de LibreOffice et arrêter l'application
import subprocess
import os
pid = os.popen("pidof soffice.bin").read() #Obtenir le pid de LibreOffice grâce à une commande du Shell Linux
if pid != '': #si le pid n'est pas vide
    print('Mon pid : ', pid) #Afficher le pid
    Commande = 'kill -9 '+ str(pid) #La commande du Shell Linux qui va pemettre d'arrêter l'application
    subprocess.Popen(['/bin/sh', '-c', Commande]) #on arrête l'application
else: #sinon - pas de pid
    print("Oops! Je n'ai pas trouvé LibreOffice")

C’est un exemple intéressant, mais en fait on peut arrêter une application sans disposer de son PID avec la commande pkill. Ce qui donne l’exemple qui suit :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
import subprocess
subprocess.Popen(['/bin/sh', '-c', "pkill office"]) #on arrête l'application LibreOffice

Ce que je trouve dommage, c’est que l’on ne teste pas au préalable si LibreOffice est effectivement lancé. Vous avez une idée pour améliorer cela ?

Client Samba avec Python

J’utilise Debian 10 Buster et Python 3.7.3

Dans cet exemple, j’installe une bibliothèque pour Python 3 (un client Samba) afin de pouvoir accéder à un partage réseau Windows.

Installation des paquets nécessaires à la mise en place des bibliothèques pour Python 3, en administrateur (root pour Debian ou sudo pour Ubuntu, Mint). Pip est un gestionnaire de paquets :

apt-get install python-pip python3-pip

Installation de la bibliothèque pysmbclient ( client samba) pour Python 3 avec pip :

pip3 install pysmbclient

Grâce à cette installation, je vais pouvoir accéder aux partages réseau depuis Python.

Dans mon script Python j’ajoute la ligne suivant pour utiliser la bibliothèque pysmbclient :

import smbclient

Prérequis :

J’ai installé également les paquets samba et smbclient pour Linux  (en root ou avec sudo) pour pouvoir utiliser le client Samba :

apt-get install samba smbclient

Exemple :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
import smbclient
serveursmb = "PC-DOM"
partagesmb = "Partage-Diaporama"
utilisateur = "dominique"
mot_de_passe = "motdepasse"
domaine = "WORKGROUP"
fichier_diaporama = "Diaporama.odp"
smb = smbclient.SambaClient(server=serveursmb, share=partagesmb, username=utilisateur, password=mot_de_passe, domain=domaine)
#Afficher des informations sur le fichier
informations = smb.info(fichier_diaporama)
print(informations)
#Afficher les fichiers contenus dans le dossier partagé
test = smb.listdir("/")
print(test)
'''Pour télécharger le fichier distant \\PC-DOM\Partage-Diaporama\Diaporama.odp
vers vers le dossier courant - chemin absolu /home/Dominique/Documents/Diaporama.odp'''
local_path = "./" + fichier_diaporama
smb.download(fichier_diaporama, local_path)