From 882d5f1886b1d88ff4292822741919692a551ff9 Mon Sep 17 00:00:00 2001 From: ggil Date: Mon, 3 Feb 2025 12:15:49 +0100 Subject: [PATCH] refs #1437 - Remove unnecessary sudo calls --- api/repo_api.py | 40 ++++++++++++++++++++-------------------- api/test_repo_api.py | 5 ++++- bin/createTorrentSum.py | 3 +-- bin/deleteImage.py | 3 +-- bin/deleteTrashImage.py | 3 +-- bin/getRepoInfo.py | 3 +-- bin/importImage.py | 3 +-- bin/recoverImage.py | 3 +-- bin/sendFileMcast.py | 3 +-- bin/updateRepoInfo.py | 3 +-- 10 files changed, 32 insertions(+), 37 deletions(-) diff --git a/api/repo_api.py b/api/repo_api.py index a012e42..cbd079b 100644 --- a/api/repo_api.py +++ b/api/repo_api.py @@ -435,7 +435,7 @@ def get_repo_status(): try: journal.send("Running script 'getRepoStatus.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") # Ejecutamos el script "getRepoStatus.py", y almacenamos el resultado: - result = subprocess.run(['sudo', 'python3', f"{script_path}/getRepoStatus.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + result = subprocess.run(['python3', f"{script_path}/getRepoStatus.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos la respuesta: if result.returncode == 0: @@ -475,7 +475,7 @@ def get_repo_info(): try: journal.send("Running script 'getRepoInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") # Ejecutamos el script "getRepoInfo.py" (con el parámetro "all"), y almacenamos el resultado: - result = subprocess.run(['sudo', 'python3', f"{script_path}/getRepoInfo.py", 'all'], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + result = subprocess.run(['python3', f"{script_path}/getRepoInfo.py", 'all'], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos la respuesta: if result.returncode == 0: @@ -517,7 +517,7 @@ def get_repo_image_info(imageId): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/getRepoInfo.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/getRepoInfo.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Image not found", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint get_repo_image_info', 'desc': 'Warning: Image not found'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -569,7 +569,7 @@ def update_repo_info(): try: journal.send("Running script 'updateRepoInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") # Ejecutamos el script "updateRepoInfo.py" (sin parámetros), y almacenamos el resultado: - result = subprocess.run(['sudo', 'python3', f"{script_path}/updateRepoInfo.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + result = subprocess.run(['python3', f"{script_path}/updateRepoInfo.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos una respuesta: if result.returncode == 0: @@ -613,7 +613,7 @@ def check_image(imageId): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/checkImage.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/checkImage.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Image not found (inexistent or deleted)", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint check_image', 'desc':'Warning: Image not found'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -677,9 +677,9 @@ def delete_image(imageId): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: if method == "permanent": - cmd = ['sudo', 'python3', f"{script_path}/deleteImage.py", f"{param_dict['name']}.{param_dict['extension']}", '-p'] + cmd = ['python3', f"{script_path}/deleteImage.py", f"{param_dict['name']}.{param_dict['extension']}", '-p'] elif method == "trash": - cmd = ['sudo', 'python3', f"{script_path}/deleteImage.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/deleteImage.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Incorrect method (must be 'permanent' or 'trash')", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint delete_image', 'desc':'Warning: Incorrect method (must be permanent or trash)'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -745,7 +745,7 @@ def recover_image(): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/recoverImage.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/recoverImage.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Image not found (inexistent or recovered previously)", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint recover_image', 'desc':'Warning: Image not found (inexistent or recovered previously)'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -799,7 +799,7 @@ def delete_trash_image(imageId): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/deleteTrashImage.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/deleteTrashImage.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Image not found at trash", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint delete_trash_image', 'desc':'Warning: Image not found at trash'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -1080,7 +1080,7 @@ def create_torrent_sum(): image_file_path = image_name # Construimos la llamada al script: - cmd = ['sudo', 'python3', f"{script_path}/createTorrentSum.py", image_file_path] + cmd = ['python3', f"{script_path}/createTorrentSum.py", image_file_path] try: journal.send("Running script 'createTorrentSum.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") @@ -1156,7 +1156,7 @@ def send_wakeonlan(): try: journal.send("Running script 'sendWakeOnLan.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") # Ejecutamos el script "sendWakeOnLan.py" (con los parámetros almacenados), y almacenamos el resultado: - result = subprocess.run(['sudo', 'python3', f"{script_path}/sendWakeOnLan.py", broadcast_ip, mac], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + result = subprocess.run(['python3', f"{script_path}/sendWakeOnLan.py", broadcast_ip, mac], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos una respuesta: if result.returncode == 0: @@ -1208,7 +1208,7 @@ def send_udpcast(): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/sendFileMcast.py", f"{param_dict['name']}.{param_dict['extension']}", f"{port}:{method}:{ip}:{bitrate}:{nclients}:{maxtime}"] + cmd = ['python3', f"{script_path}/sendFileMcast.py", f"{param_dict['name']}.{param_dict['extension']}", f"{port}:{method}:{ip}:{bitrate}:{nclients}:{maxtime}"] else: journal.send("Image not found", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint send_udpcast', 'desc':'Warning: Image not found'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -1281,7 +1281,7 @@ def send_uftp(): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/sendFileUFTP.py", f"{param_dict['name']}.{param_dict['extension']}", f"{port}:{ip}:{bitrate}"] + cmd = ['python3', f"{script_path}/sendFileUFTP.py", f"{param_dict['name']}.{param_dict['extension']}", f"{port}:{ip}:{bitrate}"] else: journal.send("Image not found", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint send_uftp', 'desc':'Warning: Image not found'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -1350,8 +1350,8 @@ def send_p2p(): # Evaluamos los parámetros obtenidos, para construir las llamadas a los scripts, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd_tracker = ['sudo', 'python3', f"{script_path}/runTorrentTracker.py"] - cmd_seeder = ['sudo', 'python3', f"{script_path}/runTorrentSeeder.py"] + cmd_tracker = ['sudo', 'python3', f"{script_path}/runTorrentTracker.py"] # Este script si que requiere ser ejecutado con "sudo" + cmd_seeder = ['sudo', 'python3', f"{script_path}/runTorrentSeeder.py"] # Este script si que requiere ser ejecutado con "sudo" base_path = repo_path.rstrip('/') # Le quito la última barra para poder buscar correctamente en los procesos else: journal.send("Image not found", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") @@ -1408,7 +1408,7 @@ def get_udpcast_info(): try: journal.send("Running script 'getUDPcastInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") # Ejecutamos el script "getUDPcastInfo.py", y almacenamos el resultado: - result = subprocess.run(['sudo', 'python3', f"{script_path}/getUDPcastInfo.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + result = subprocess.run(['python3', f"{script_path}/getUDPcastInfo.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos la respuesta: if result.returncode == 0: @@ -1457,7 +1457,7 @@ def get_uftp_info(): try: journal.send("Running script 'getUFTPInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") # Ejecutamos el script "getUFTPInfo.py", y almacenamos el resultado: - result = subprocess.run(['sudo', 'python3', f"{script_path}/getUFTPInfo.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') + result = subprocess.run(['python3', f"{script_path}/getUFTPInfo.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos la respuesta: if result.returncode == 0: @@ -1507,7 +1507,7 @@ def stop_udpcast(imageId): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/stopUDPcast.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/stopUDPcast.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Image not found", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint stop_udpcast', 'desc':'Warning: Image not found'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -1583,7 +1583,7 @@ def stop_uftp(imageId): # Evaluamos los parámetros obtenidos, para construir la llamada al script, o para devover un error si no se ha encontrado la imagen: if param_dict: - cmd = ['sudo', 'python3', f"{script_path}/stopUFTP.py", f"{param_dict['name']}.{param_dict['extension']}"] + cmd = ['python3', f"{script_path}/stopUFTP.py", f"{param_dict['name']}.{param_dict['extension']}"] else: journal.send("Image not found", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") journal.send("{'component':'ogRepo', 'severity':'WARNING', 'http_code':'400', 'operation':'Run endpoint stop_uftp', 'desc':'Warning: Image not found'}", PRIORITY=journal.LOG_WARNING, SYSLOG_IDENTIFIER="ogrepo-api") @@ -1656,7 +1656,7 @@ def stop_p2p(): try: journal.send("Running script 'stopP2P.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") - # Ejecutamos el script "stopP2P.py", y almacenamos el resultado: + # Ejecutamos el script "stopP2P.py", y almacenamos el resultado (este script si que requiere ser ejecutado con "sudo"): result = subprocess.run(['sudo', 'python3', f"{script_path}/stopP2P.py"], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='UTF8') # Evaluamos el resultado de la ejecución, y devolvemos la respuesta: diff --git a/api/test_repo_api.py b/api/test_repo_api.py index 60bab3f..ce6e3ee 100644 --- a/api/test_repo_api.py +++ b/api/test_repo_api.py @@ -35,6 +35,7 @@ from repo_api import app, get_image_params, search_process, check_remote_connect # -------------------------------------------------------------------------------------------- repo_path = '/opt/opengnsys/ogrepository/images' +trash_path = '/opt/opengnsys/ogrepository/images_trash/' # -------------------------------------------------------------------------------------------- @@ -66,10 +67,12 @@ class RepoApiTestCase(unittest.TestCase): def tearDown(self): """ Limpia el entorno de pruebas (después de cada test). - En este caso, elimina el archivo "test4unittest.img" (imagen de prueba). + En este caso, elimina el archivo "test4unittest.img" (de "repo_path" y de "trash_path"). """ if os.path.exists(f"{repo_path}/test4unittest.img"): os.remove(f"{repo_path}/test4unittest.img") + if os.path.exists(f"{trash_path}/test4unittest.img"): + os.remove(f"{trash_path}/test4unittest.img") def mock_search_process(process, string_to_search): diff --git a/bin/createTorrentSum.py b/bin/createTorrentSum.py index 2c4112d..4e23946 100644 --- a/bin/createTorrentSum.py +++ b/bin/createTorrentSum.py @@ -155,11 +155,10 @@ def create_torrent(file_path, torrent_file, datafullsum): def update_repo_info(): """ Actualiza la información del repositorio, ejecutando el script "updateRepoInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: journal.send("createTorrentSum.py: Running script 'updateRepoInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") - result = subprocess.run(['sudo', 'python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: journal.send(f"createTorrentSum.py: 'updateRepoInfo.py' error: {error}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") print(f"Error Output: {error.stderr.decode()}") diff --git a/bin/deleteImage.py b/bin/deleteImage.py index 4291d0c..a136330 100644 --- a/bin/deleteImage.py +++ b/bin/deleteImage.py @@ -142,10 +142,9 @@ def delete_image(file_path, method, extensions): def update_repo_info(): """ Actualiza la información del repositorio, ejecutando el script "updateRepoInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: - result = subprocess.run(['sudo', 'python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: print(f"Error Output: {error.stderr.decode()}") sys.exit(3) diff --git a/bin/deleteTrashImage.py b/bin/deleteTrashImage.py index b20f662..6c192f0 100644 --- a/bin/deleteTrashImage.py +++ b/bin/deleteTrashImage.py @@ -98,10 +98,9 @@ def delete_image(file_path, extensions): def update_trash_info(): """ Actualiza la información de la papelera, ejecutando el script "updateTrashInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: - result = subprocess.run(['sudo', 'python3', update_trash_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_trash_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: print(f"Error Output: {error.stderr.decode()}") sys.exit(3) diff --git a/bin/getRepoInfo.py b/bin/getRepoInfo.py index c94a0fc..1810f36 100644 --- a/bin/getRepoInfo.py +++ b/bin/getRepoInfo.py @@ -77,10 +77,9 @@ def check_params(): def update_repo_info(): """ Actualiza la información del repositorio, ejecutando el script "updateRepoInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: - result = subprocess.run(['sudo', 'python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: print(f"Error Output: {error.stderr.decode()}") sys.exit(3) diff --git a/bin/importImage.py b/bin/importImage.py index 769fdaf..1847298 100644 --- a/bin/importImage.py +++ b/bin/importImage.py @@ -157,11 +157,10 @@ def import_image(file_path, remote_host, remote_user): def update_repo_info(): """ Actualiza la información del repositorio, ejecutando el script "updateRepoInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: journal.send("importImage.py: Running script 'updateRepoInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") - result = subprocess.run(['sudo', 'python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: journal.send(f"importImage.py: 'updateRepoInfo.py' error: {error}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") print(f"Error Output: {error.stderr.decode()}") diff --git a/bin/recoverImage.py b/bin/recoverImage.py index 24fd5b5..a05c04b 100644 --- a/bin/recoverImage.py +++ b/bin/recoverImage.py @@ -109,10 +109,9 @@ def recover_image(file_path, extensions): def update_repo_info(): """ Actualiza la información del repositorio, ejecutando el script "updateRepoInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: - result = subprocess.run(['sudo', 'python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_repo_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: print(f"Error Output: {error.stderr.decode()}") sys.exit(3) diff --git a/bin/sendFileMcast.py b/bin/sendFileMcast.py index 9722ddf..108f246 100644 --- a/bin/sendFileMcast.py +++ b/bin/sendFileMcast.py @@ -96,11 +96,10 @@ def build_file_path(): def get_repo_iface(): """ Obtiene y retorna la interfaz del repositorio, ejecutando el script "getRepoIface.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: journal.send("sendFileMcast.py: Running script 'getRepoIface.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") - result = subprocess.run(['sudo', 'python3', repo_iface_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', repo_iface_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) repo_iface = result.stdout.decode().strip() # Es necesario poner "strip", o dará error. return repo_iface except subprocess.CalledProcessError as error: diff --git a/bin/updateRepoInfo.py b/bin/updateRepoInfo.py index eb63034..de0487a 100644 --- a/bin/updateRepoInfo.py +++ b/bin/updateRepoInfo.py @@ -171,11 +171,10 @@ def remove_from_json(): def update_trash_info(): """ Actualiza la información de la papelera del repositorio, ejecutando el script "updateTrashInfo.py". - Como se ve, es necesario que el script se ejecute como sudo, o dará error. """ try: journal.send("updateRepoInfo.py: Running script 'updateTrashInfo.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") - result = subprocess.run(['sudo', 'python3', update_trash_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run(['python3', update_trash_script], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except subprocess.CalledProcessError as error: journal.send(f"updateRepoInfo.py: 'updateTrashInfo.py' error: {error}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG") print(f"Error Output: {error.stderr.decode()}") -- 2.40.1