скрипт для поиска 777 файлов и папок, как улучшить и сделать его совместимым в python 2.4 (RHEL5) - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть следующий код, мой первый скрипт Python. он должен находить файлы и папки с разрешениями 777, исключая некоторые папки, такие как / proc и т. д.

есть ли способ улучшить скрипт?

#!/usr/bin/env python


import os, sys, socket,csv

from os.path import join

mode = int('777', 8) 
results = {} 
host = socket.gethostname() 
results[host] = {}

exclude = ['proc', 'run']

def get_username(uid):
    import pwd
    try:
        return pwd.getpwuid(uid).pw_name
    except KeyError:
        return uid


def find_files():
    for (dirpath, dirnames, filenames) in os.walk('/'):
        dirnames[:] = [d for d in dirnames if d not in exclude]
        listoffiles = [join(dirpath, file) for file in filenames]
        listoffiles += [join(dirpath,dir) for dir in dirnames]
        for path in listoffiles:
            try:
                statinfo = os.stat(path)
            except OSError:
               #print(path)
               pass
            if (statinfo.st_mode & 0o777) == mode:
                results[host][path] = {}
                results[host][path]['owner'] = get_username(statinfo.st_uid)
                results[host][path]['perm']  = oct(statinfo.st_mode & 0o777)
    return results

find_files()

resultstxt = csv.writer(open('results_%s.csv' % host, 'w')) for hostname,data in results.items():
    for path, attributes in data.items():
      resultstxt.writerow([hostname, path, attributes['perm'], str(attributes['owner'])])

Мне также нужно изменить его, потому что у нас есть пара устаревших серверов rhel5, и код не работает со странной синтаксической ошибкой:

 File "./find777.py", line 34
    if (statinfo.st_mode & 0o777) == mode:
                               ^

1 Ответ

0 голосов
/ 04 апреля 2019

Используйте 0777 вместо 0o777.

Префикс 0o для восьмеричных чисел не был доступен в Python 2.4. Традиционный префикс 0 работает до Python 3.

...