Módulos estándares: módulos de sistema

Python tiene sus propios módulos, los cuales forman parte de su librería de módulos estándar, que también pueden ser importados. En esta unidad vamos a estudiar las funciones porincipales de módulos realacionados con el sistema operativo.

Módulo os

El módulo os nos permite acceder a funcionalidades dependientes del Sistema Operativo. Sobre todo, aquellas que nos refieren información sobre el entorno del mismo y nos permiten manipular la estructura de directorios.

Descripción Método
Saber si se puede acceder a un archivo o directorio os.access(path, modo_de_acceso)
Conocer el directorio actual os.getcwd()
Cambiar de directorio de trabajo os.chdir(nuevo_path)
Cambiar al directorio de trabajo raíz os.chroot()
Cambiar los permisos de un archivo o directorio os.chmod(path, permisos)
Cambiar el propietario de un archivo o directorio os.chown(path, permisos)
Crear un directorio os.mkdir(path[, modo])
Crear directorios recursivamente os.mkdirs(path[, modo])
Eliminar un archivo os.remove(path)
Eliminar un directorio os.rmdir(path)
Eliminar directorios recursivamente os.removedirs(path)
Renombrar un archivo os.rename(actual, nuevo)
Crear un enlace simbólico os.symlink(path, nombre_destino)
>>> import os
>>> os.getcwd()
'/home/jose/github/curso_python3/curso/u40'
>>> os.chdir("..")
>>> os.getcwd()
'/home/jose/github/curso_python3/curso'

El módulo os también nos provee del submódulo path (os.path) el cual nos permite acceder a ciertas funcionalidades relacionadas con los nombres de las rutas de archivos y directorios.

Descripción Método
Ruta absoluta os.path.abspath(path)
Directorio base os.path.basename(path)
Saber si un directorio existe os.path.exists(path)
Conocer último acceso a un directorio os.path.getatime(path)
Conocer tamaño del directorio os.path.getsize(path)
Saber si una ruta es absoluta os.path.isabs(path)
Saber si una ruta es un archivo os.path.isfile(path)
Saber si una ruta es un directorio os.path.isdir(path)
Saber si una ruta es un enlace simbólico os.path.islink(path)
Saber si una ruta es un punto de montaje os.path.ismount(path)

Ejecutar comandos del sistema operativo. Módulo subprocess

Con la función system() del módulo os nos permite ejecutar comandos del sistema operativo.

>>> os.system("ls")
curso  modelo.odp  README.md
0

La función nos devuelve un código para indicar si la instrucción se ha ejecutado con éxito.

Tenemos otra forma de ejecutar comandos del sistema operativo que nos da más funcionalidad, por ejemplo nos permite guardar la salida del comando en una variable. Para ello podemos usar el módulo subprocess

>>> import subprocess
>>> subprocess.call("ls")
curso  modelo.odp  README.md
0

>>> salida=subprocess.check_output("ls")
>>> print(salida.decode())
curso
modelo.odp
README.md

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

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

Módulo shutil

El módulo shutil de funciones para realizar operaciones de alto nivel con archivos y directorios. Dentro de las operaciones que se pueden realizar está copiar, mover y borrar archivos y directorios; y copiar los permisos y el estado de los archivos.

Descripción Método
Copia un fichero complero o parte shutil.copyfileobj(fsrc, fdst[, length])
Copia el contenido completo (sin metadatos) de un archivo shutil.copyfile(src, dst, *, follow_symlinks=True)
copia los permisos de un archivo origen a uno destino shutil.copymode(src, dst, *, follow_symlinks=True)
Copia los permisos, la fecha-hora del último acceso, la fecha-hora de la última modificación y los atributos de un archivo origen a un archivo destino shutil.copystat(src, dst, *, follow_symlinks=True)
Copia un archivo (sólo datos y permisos) shutil.copy(src, dst, *, follow_symlinks=True)
Copia archivos (datos, permisos y metadatos) shutil.move(src, dst, copy_function=copy2)
Obtiene información del espacio total, usado y libre, en bytes shutil.disk_usage(path)
Obtener la ruta de un archivo ejecutable shutil.chown(path, user=None, group=None)
Saber si una ruta es un enlace simbólico shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)

Módulos sys

El módulo sys es el encargado de proveer variables y funcionalidades, directamente relacionadas con el intérprete.

Algunas variables definidas en el módulo:

Variable Descripción
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

Ejecución de scripts con argumentos

Podemos enviar información (argumentos) a un programa cuando se ejecuta como un script, por ejemplo:

#!/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