1 votos

Python script no se ejecuta en la carpeta Descargas

Estoy desconcertado. Mi script de Python tiene dos partes. Es muy simple.

Parte 1: Crea una nueva carpeta basada en la fecha y la hora. Luego mueve todos los archivos a esa carpeta. Esto ocurre una vez al día controlado por launchd.
Parte-2: Borra los directorios con más de 10 días de antigüedad.

Lo que he encontrado con mi nuevo ordenador o sistema operativo (Ventura 13.0), cuando el script no está en la carpeta Descargas, la primera parte del código se ejecuta bien, pero la segunda parte falla (la parte que borra los directorios antiguos). Sin embargo, cuando pongo la segunda parte de mi script en la carpeta

Descargas, se ejecuta sin problemas (es decir, borrando los directorios antiguos).

Me pregunto si se trata de un problema de permisos de MacOS. Algo que me permite crear carpetas pero no borrarlas cuando mi script se ejecuta desde una carpeta externa (fuera de la carpeta Descargas). Si es así, cómo lo resuelvo.

Código completo:

from datetime import datetime, date
from time import sleep
import os, shutil, pathlib

path = "/Users/user/Downloads/" #get the path to target directory
#get all the files into a list.
names = [name for name in os.listdir(path) if os.path.isfile(os.path.join(path, name))] 

#select regular files, i.e. ignore hidden files and python files
regfiles = [f for f in names if not f.startswith('.') and f in names if not f.endswith('.py')]

#Now, lets grab the file extension os that we can label our new director properly
extensions = []
for item in regfiles:
    extensions.append(pathlib.Path(item).suffix)

uniqExtensions = set(extensions)
uniqExtensions =''.join(uniqExtensions)

#get time function to name new directory
now  = datetime.now()
year = now.strftime("%Y")
month= now.strftime("%m")
day  = now.strftime("%d")
time = now.strftime("%H%M%S")
dir_name =(str(year)+str(month)+str(day)+"."+str(time))
dir_name = path + dir_name + uniqExtensions

myFilesWithFullPath=[]
for item in regfiles:
    myFilesWithFullPath.append(path+item)

os.mkdir(dir_name)
for f in myFilesWithFullPath:
    shutil.move(f, dir_name)

# #remove empty directories by a system call
#os.system("find %s -type d -empty -delete"%(path))
#------------------------
today = date.today()
names = os.listdir(path)
for item in names:
    if os.path.isdir(item):
        if not item.startswith('.'): 
            dirdate = date.fromtimestamp(os.path.getmtime(item))
            #print((today - dirdate).days)
            if ((today - dirdate).days) > 10:
                shutil.rmtree(item)

La parte del código sólo se ejecuta cuando el script está en la carpeta Descargas:

#------------------------
today = date.today()
names = os.listdir(path)
for item in names:
    if os.path.isdir(item):
        if not item.startswith('.'): 
            dirdate = date.fromtimestamp(os.path.getmtime(item))
            #print((today - dirdate).days)
            if ((today - dirdate).days) > 10:
                shutil.rmtree(item)

Actualización:

Así es como llamo al script de Python desde el archivo .plist. Y, cuando ejecuto mi Python script para las pruebas de Terminal que uso:

$ python3 organize-downloads-folder.py

para las pruebas.

</array> 
    <array>
        <string>/Users/user-x/opt/miniconda3/bin/python</string>
        <string>./Users/user-x/scripts/organize-downloads-folder.py</string>
    </array>

1voto

Supertech Puntos 101

Resultó ser que el problema estaba en el código Python. No estaba escribiendo correctamente la ruta completa a los directorios de la carpeta Descargas. Aquí está el código funcional después de actualizar la segunda parte del script.

from datetime import date, datetime, timedelta
from time import sleep
import os, shutil, pathlib

path = "/Users/user/Downloads/" #get the path to target directory
#get all the files into a list.
names = [name for name in os.listdir(path) if os.path.isfile(os.path.join(path, name))] 

#select regular files, i.e. ignore hidden files and python files
regfiles = [f for f in names if not f.startswith('.') and f in names if not f.endswith('.py')]

#Now, lets grab the file extension os that we can label our new director properly
extensions = []
for item in regfiles:
    extensions.append(pathlib.Path(item).suffix)

uniqExtensions = set(extensions)
uniqExtensions =''.join(uniqExtensions)

#get time function to make new directory
now  = datetime.now()
year = now.strftime("%Y")
month= now.strftime("%m")
day  = now.strftime("%d")
time = now.strftime("%H%M%S")
dir_name =(str(year)+str(month)+str(day)+"."+str(time))
dir_name = path + dir_name + uniqExtensions
print(dir_name) #print on the terminal

myFilesWithFullPath=[]
for item in regfiles:
    myFilesWithFullPath.append(path+item)

# [print(x) for x in myFilesWithFullPath] #debugging
os.mkdir(dir_name)
for f in myFilesWithFullPath:
    shutil.move(f, dir_name)
    print(f)
#------------------------------
curret_time = datetime.now()
names = os.listdir(path)
for name in names:
    if os.path.isdir(os.path.join(path,name)) and not name.startswith('.'):
        mydir = (os.path.join(path,name))
        stat = os.stat(mydir)
        creation_time = datetime.fromtimestamp(stat.st_birthtime)
        dir_age = curret_time - creation_time       
        if dir_age > timedelta(4):
            #print("--remove--", mydir)
            shutil.rmtree(mydir)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X