Tengo una secuencia de comandos para informarme sobre todos los archivos, en un directorio, por lo que los usuarios deberán borrarlos (es realmente muy malo) clúster administrado, sin superusuario real). Cuando ejecuto el guión me sale: OSError: [Errno 13] Permiso denegado: ' ls:: Permiso denegado no puedo escribir el nombre dir (política de la empresa) El código es:Obtengo OSError: [Errno 13] Permiso denegado: <dir name>, y os.walk sale de
#!/depot/Python-3.1.1/bin/python3.1
from stat import *
import stat
import sys
from collections import defaultdict
from pwd import getpwuid
import sys
sys.path.append('/remote/us01home15/ldagan/python')
import mailer
import os
import re
import glob
import subprocess
import pwd
def find_owner(file):
return pwd.getpwuid(os.stat(file)[stat.ST_UID]).pw_name
if (len(sys.argv) < 1):
sys.error('''Please input <runda number> <case number>''')
files_by_users=defaultdict(list)
runda_num="".join(sys.argv[1])
dir_basic='/berry/secure'
case_num="".join(sys.argv[2])
secure_dir="".join([dir_basic,"/"])
i=1
dirs=[]
runda_case_dir="".join([dir_basic,'/',runda_num,'/',case_num ])
while (os.path.exists(secure_dir)):
if (os.path.exists(runda_case_dir)):
dirs.append(runda_case_dir)
i+=1
secure_dir="".join([dir_basic,str(i)])
runda_dir="/".join([secure_dir,runda_num,case_num])
#now finding list of
manager_email='[email protected] [email protected]'
def bull (msg):
i=1
for dir in dirs:
for root,dirs,files in os.walk(dir,onerror=bull):
for file in files:
file_full_name=os.path.join(root,file)
files_by_users[find_owner(file_full_name)].append(file_full_name)
for username in files_by_users:
sendOffendingNotice(username, file_by+users[username], manager_email)
def sendOffendingNotice(username,filenames,managerEmail):
"""gets file name & manager Email
sends an Email to the manager for review. As there are no smtp
definitions, mailx shall be used"""
user_email=username+'@synopsys.com'
message="""The following files \n""" + """\n""".join(filenames) +"""\n""" + \
""" which belongs to user """ + username +""" does not meet the required names's SPEC\nPlease keep it under a directory which has a proper case/star name\n"""
message= """echo \"""" + message+ """" | mailx -s "Offending files" """ + managerEmail +" " #+user_email
process=subprocess.Popen(message,shell=True)
La secuencia de comandos no envía el correo electrónico, pero muere. Gracias por ayudar a un newbe.
Debe ejecutar esto a través de la secuencia de comandos pep8 y corregir el formateo ... – Daenyth
No pegue todo el código al hacer una pregunta de todos modos: elimine las cosas irrelevantes, no espere que todos vayan a través de un código no relacionado. Y, por el bien de la cordura de todos, deje de usar "" "strings" "" en todas partes sin ningún motivo. –