fixed permission error for some OS

This commit is contained in:
Félix Boisselier
2024-04-24 14:02:27 +02:00
parent 99b719051c
commit 31a5ed8db2

View File

@@ -3,33 +3,31 @@
# Common file management functions for the Shake&Tune package # Common file management functions for the Shake&Tune package
# Written by Frix_x#0161 # # Written by Frix_x#0161 #
import os
import time import time
from pathlib import Path from pathlib import Path
def wait_file_ready(filepath: Path) -> None: def wait_file_ready(filepath: Path, timeout: int = 60) -> None:
file_busy = True file_busy = True
loop_count = 0 loop_count = 0
proc_path = Path('/proc')
while file_busy:
if loop_count > 60:
# If Klipper is taking too long to release the file (60 * 1s = 1min), raise an error
raise TimeoutError(f'Klipper is taking too long to release {filepath}!')
for proc in proc_path.iterdir(): while file_busy:
if proc.name.isdigit(): if loop_count >= timeout:
fd_path = proc / 'fd' raise TimeoutError(f'Klipper is taking too long to release the CSV file ({filepath})!')
if fd_path.exists():
for fd in fd_path.iterdir(): # Try to open the file in write-only mode to check if it is in use
try: # If we successfully open and close the file, it is not in use
# Using resolve to ensure symbolic links are followed try:
if fd.resolve(strict=False) == filepath: fd = os.open(filepath, os.O_WRONLY)
pass # File is still being used by Klipper os.close(fd)
except FileNotFoundError: # Klipper has already released the CSV file file_busy = False
file_busy = False except OSError:
break # If OSError is caught, it indicates the file is still being used
except PermissionError: # Unable to check for this particular process due to permissions pass
pass except Exception:
# If another exception is raised, it's not a problem, we just loop again
pass
loop_count += 1 loop_count += 1
time.sleep(1) time.sleep(1)