Salta el contingut

Mòduls estàndards: mòduls de sistema

Python té els seus propis mòduls, els quals formen part de la seva llibreria de mòduls estàndard, que també poden ser importats. En aquesta unitat anem a estuir les funcions principals de mòduls relacionats amb el sistema operatiu i especialment amb el treball amb fitxers i directoris.

Mòdul os

El mòdul os ens permet accedir a funcionalitats dependenes del Sistema Operatiu. Sobre tot, aquelles que ens refereixen informació sobre l'entorn del mateix i ens permeten manipular l'estructura de directoris.

at
DescripcióMètode
Saber si es pot accedir a un arxiu o directori os.access(path, mode_de_acces)
Conèixer el directori actual os.getcwd()
Canviar de directori de treball os.chdir(nou_path)
Canviar el directori de treball arrel os.chroot()
Canviar els permissos d'un arxiu o directori os.chmod(path, permissos)
Canviar el propietari d'un arxiu o directorio os.chown(path, permissos)
Crear un directori os.mkdir(path[, mode])
Crear directoris recursivament os.mkdirs(path[, mode])
Eliminar un fitxer os.remove(path)
Eliminar un directori os.rmdir(path)
Eliminar directoris recursivamente os.removedirs(path)
Renombrar un fitxer os.rename(actual, nou)
Crear un enllaç simbòlic os.symlink(path, nom_desti)
>>> import os
>>> os.getcwd()
'/home/francesc/github/python/curs/u40'
>>> os.chdir("..")
>>> os.getcwd()
'/home/francesc/github/python/curs'

El mòdul os també ens proveeix del submòdul path (os.path) el qual ens permet accedir a certes funcionalitats relacionades amb els noms de les rutes de fitxers i directoris.

Descripció Mètode
Ruta absoluta os.path.abspath(path)
Directori base os.path.basename(path)
Saber si un directori existeix os.path.exists(path)
Conèixer el darrer accés a un directori os.path.getatime(path)
Conèixer tamany del directori os.path.getsize(path)
Saber si una ruta és absoluta os.path.isabs(path)
Saber si una ruta és un fitxer os.path.isfile(path)
Saber si una ruta és un directori os.path.isdir(path)
Saber si una ruta és un enllaç simbòlic os.path.islink(path)
Saber si una ruta és un punt de muntatge os.path.ismount(path)

Executar comandes del sistema operatiu. Mòdul subprocess

Amb la funció system() del mòdul os ens permet executar comandes del sistema operatiu.

>>> os.system("ls")
curs  model.odp  README.md
0

La funció ens retorna un codi per indicar si l'instrucció s'ha executat amb èxit.

Tenim una altre manera d'executar comandes del sistema operatiu que ens dona més funcionalitat, per exemple ens permet guardar la sortida de la comanda en una variable. Per fer-ho podem utilitzar el mòdul subprocess

>>> import subprocess
>>> subprocess.call("ls")
curs  model.odp  README.md
0

>>> salida=subprocess.check_output("ls")
>>> print(salida.decode())
curs
model.odp
README.md

>>> salida=subprocess.check_output(["df","-h"])

>>> salida = subprocess.Popen(["df","-h"], stdout=subprocess.PIPE)
>>> salida.communicate()[0]

Mòdul shutil

El mòdul shutil de funcions per realitzar operacions d'alt nivell amb fitxers i directoris. Dintre de les operacions que es poden realitzar estàn copiar,moure i borrar fitxers i directories; i copiar els permissos i l'estat dels fitxers.

Descripció Mètode
Copia un fitxers complert o part shutil.copyfileobj(fsrc, fdst[, length])
Copia el contingut complet (sense metadades) d'un fitxer shutil.copyfile(src, dst, *, follow_symlinks=True)
copia els permissos d'un fitxer origen a un destí shutil.copymode(src, dst, *, follow_symlinks=True)
Copia els permissos, la data-hora de l'últim accés, la data-hora de la darrera modificació i els atributs d'un fitxer origen a un fitxer destí shutil.copystat(src, dst, *, follow_symlinks=True)
Copia un fitxer (només dades i permissos) shutil.copy(src, dst, *, follow_symlinks=True)
Copia fitxers (dades, permissos i metadades) shutil.move(src, dst, copy_function=copy2)
Obté informació de l'espai total, usat i lliure, en bytes shutil.disk_usage(path)
Obtenir la ruta d'un fitxer executable shutil.chown(path, user=None, group=None)
Saber si una ruta és un enllaç simbòlic shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)

Mòduls sys

El mòdul sys és el encarregat de proveir variables i funcionalitats, directament relacionades amb l'intèrpret.

Algunes variables definides en el mòdul:

Variable Descripció
sys.argv Retorna una lista con todos los argumentos pasados por línea de comandos. Al ejecutar python modulo.py arg1 arg2, retornará una lista: ['modulo.py', 'arg1', 'arg2']
sys.executable Retorna el path absoluto del binario ejecutable del intérprete de Python
sys.platform Retorna la plataforma sobre la cuál se está ejecutando el intérprete
sys.version Retorna el número de versión de Python con información adicional

Y algunos métodos:

Método Descripción
sys.exit() Forzar la salida del intérprete
sys.getdefaultencoding() Retorna la codificación de caracteres por defecto

Execució de scripts amb arguments

Podem enviar informació (arguments) a un programa quan s'executa como un script, per exemple:

#!/usr/bin/env python   
import sys
print("Has instroducido",len(sys.argv),"argumento")
suma=0
for i in range(1,len(sys.argv)):
    suma=suma+int(sys.argv[i])
print("La suma es ",suma)

$  python3 sumar.py 3 4 5
Has introducido 4 argumento
La suma es  12

Altres mòduls interessants

pathlib

Permet manipular rutes de sistemes d'arxius de forma agnòstica en qualsevol sistema operatiu. El mòdul pathlib és similar a l'os.path, però pathlib ofereix una interfície de nivell més alt, i, sovint, més convenient, que os.path.

glob

Inclou funcions per buscar en una ruta tots els noms d'arxius i/o directoris que coincideixin amb un determinat patró que pot contenir comodins com els que s'utilitzen en un intèrpret de comandaments tipus Unix (*,?, []).

filecmp

Defineix funcions per comparar fitxers i directoris