Python IOError: Errno 13 Odmowa zezwolenia
Ok, jestem całkowicie zaskoczony. Pracowałem nad tym całą noc i nie mogę go uruchomić. Mam przesłankę, by zajrzeć do pliku, wszystko, co chcę zrobić, to przeczytać tę cholerną rzecz. Za każdym razem, gdy próbuję, otrzymuję:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
scan('test', rules, 0)
File "C:\Python32\PythonStuff\csc242hw7\csc242hw7.py", line 45, in scan
files = open(n, 'r')
IOError: [Errno 13] Permission denied: 'test\\test'
Oto mój kod. Jest niedokończona, ale czuję, że powinienem przynajmniej uzyskać poprawne wartości dla sekcji, które testuję. Zasadniczo chcę zajrzeć do folderu, a jeśli istnieje skanowanie plików, szuka tego, co ustawięsignatures
do. Jeśli są foldery, będę je skanował lub nie będę skanował w zależności oddepth
określony. Jeśli tam jestdepth < 0
wtedy wróci. Jeślidepth == 0
następnie skanuje elementy w pierwszym folderze. Jeślidepth > 0
skanuje foldery do określonej głębokości. Nic z tego nie przyszło do głowy, ponieważ z jakiegoś powodu nie mam pozwolenia na odczytanie tego pliku. Nie mam pojęcia, co robię źle.
def scan(pathname, signatures, depth):
'''Recusively scans all the files contained in the folder pathname up
until the specificed depth'''
# Reconstruct this!
if depth < 0:
return
elif depth == 0:
for item in os.listdir(pathname):
n = os.path.join(pathname, item)
try:
# List a directory on n
scan(n, signatures, depth)
except:
# Do what you should for a file
files = open(n, 'r')
text = file.read()
for virus in signatures:
if text.find(signatures[virus]) > 0:
print('{}, found virus {}'.format(n, virus))
files.close()
Szybka edycja:
Poniższy kod robi coś bardzo podobnego, ale nie mogę kontrolować głębi. Jednak działa dobrze.
def oldscan(pathname, signatures):
'''recursively scans all files contained, directly or
indirectly, in the folder pathname'''
for item in os.listdir(pathname):
n = os.path.join(pathname, item)
try:
oldscan(n, signatures)
except:
f = open(n, 'r')
s = f.read()
for virus in signatures:
if s.find(signatures[virus]) > 0:
print('{}, found virus {}'.format(n,virus))
f.close()