#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Este script envía un paquete mágico WOL a la dirección MAC especificada como segundo parámetro, a través de la IP de broadcast especificada como primer parámetro. La IP de broadcast puede corresponder a toda la red ("255.255.255.255"), que es el valor por defecto, o a una subred concreta (por ejemplo, "10.2.7.255"). Parámetros ------------ sys.argv[1] - Dirección IP de broadcast de toda la red o de una subred concreta. - Ejemplo1: 255.255.255.255 - Ejemplo2: 10.2.7.255 sys.argv[2] - Dirección MAC del equipo que se quiere enceder via WOL. - Ejemplo: 00:19:99:5c:bb:bb Sintaxis ---------- ./sendWakeOnLan.py broadcast_IP MAC Ejemplos --------- ./sendWakeOnLan.py 255.255.255.255 00:19:99:5c:bb:bb ./sendWakeOnLan.py 10.2.7.255 00:19:99:5c:bb:bb """ # -------------------------------------------------------------------------------------------- # IMPORTS # -------------------------------------------------------------------------------------------- import os import sys import subprocess # -------------------------------------------------------------------------------------------- # VARIABLES # -------------------------------------------------------------------------------------------- script_name = os.path.basename(__file__) # -------------------------------------------------------------------------------------------- # FUNCTIONS # -------------------------------------------------------------------------------------------- def show_help(): """ Imprime la ayuda, cuando se ejecuta el script con el parámetro "help". """ help_text = f""" Sintaxis: {script_name} broadcast_IP MAC Ejemplo1: {script_name} 255.255.255.255 00:19:99:5c:bb:bb Ejemplo2: {script_name} 10.2.7.255 00:19:99:5c:bb:bb """ print(help_text) def check_params(): """ Comprueba que se haya enviado la cantidad correcta de parámetros, y en el formato correcto. Si no es así, muestra un mensaje de error, y sale del script. LLama a la función "show_help" cuando se ejecuta el script con el parámetro "help". """ # Si se ejecuta el script con el parámetro "help", se muestra la ayuda, y se sale del script: if len(sys.argv) == 2 and sys.argv[1] == "help": show_help() sys.exit(0) # Si se ejecuta el script con más o menos de 2 parámetros, se muestra un error y la ayuda, y se sale del script: elif len(sys.argv) != 3: print(f"{script_name} Error: Formato incorrecto: Se debe especificar 2 parámetros") show_help() sys.exit(1) # -------------------------------------------------------------------------------------------- # MAIN # -------------------------------------------------------------------------------------------- def main(): """ """ # Evaluamos si se ha enviado la cantidad correcta de parámetros, y en el formato correcto: check_params() # Almacenamos los parámetros en variables: broadcast_IP = sys.argv[1] MAC = sys.argv[2] # Creamos una lista con el comando a enviar, y lo imprimimos con espacios: splitted_cmd = f"wakeonlan -i {broadcast_IP} {MAC}".split() print(f"Sending command: {' '.join(splitted_cmd)}") # Ejecutamos el comando en el sistema, e imprimimos el resultado: try: result = subprocess.run(splitted_cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(f"ReturnCode: {result.returncode}") except subprocess.CalledProcessError as error: print(f"ReturnCode: {error.returncode}") print(f"Error Output: {error.stderr.decode()}") except Exception as error_description: print(f"Unexpeted error: {error_description}") # -------------------------------------------------------------------------------------------- if __name__ == "__main__": main() # --------------------------------------------------------------------------------------------