Скрипт Python не работает в разных виртуальных машинах - PullRequest
0 голосов
/ 09 мая 2019

У меня есть скрипт, который очищает журналы по определенному пути.

Этот скрипт работает на одной виртуальной машине, но когда я экспортирую на другую, этот скрипт не работает.Версии python одинаковы:

[ec2-user@host1 h]$ python3 --version
Python 3.5.1

Ошибка:

Traceback (most recent call last):
  File "jenk.py", line 54, in <module>
    dicta = dict(path)
  File "jenk.py", line 51, in dict
    dicto[elem] = { (dirs['Subdir'][elem]['Path']) : (dirs['Subdir'][elem]['Num_Subdir']) }
KeyError: 'Path'

Это код:

def PathToDict(path):
    st = os.lstat(path)
    result = {}
    if S_ISDIR(st.st_mode):
        result['Path'] = path
        result['Subdir'] = {
            name: PathToDict(path+'/'+name)
            for name in os.listdir(path)}
        result['Num_Subdir'] = int(len([i for i, j, k in os.walk(path)]))
#        result['RealSize'] = subprocess.check_output(['du','-sh', path]).split()[0].decode('utf-8')

    else:
        result['type'] = 'file'
    return result

dirs = PathToDict(path)


#Getting new dict with clean info with name of dir and number of dirs

def dict(path):

    dicto = {}
    for elem in dirs['Subdir']:
        dicto[elem] = { (dirs['Subdir'][elem]['Path']) : (dirs['Subdir'][elem]['Num_Subdir']) }
    return dicto

Есть идеи?Может ли быть проблема модулей?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Одна вещь, которая может сделать вещи зависимыми, заключается в том, что вы вручную присоединяете путь к файлу в

 name: PathToDict(path+'/'+name)

Однако это / не может быть допустимым на всех устройствах.Вместо этого лучше использовать модуль os.path в python для объединения путей.Это автоматически выберет правильный разделитель.

name: PathToDict(os.path.join(path,name))

Это, по крайней мере, сделает эту часть платформы кода независимой.

Дополнительно, передавая ваш ввод через os.path.normpath убедится, что входные данные правильно проанализированы для чего-то, что доступно для чтения на вашей платформе.

0 голосов
/ 09 мая 2019

в элементе нет «Пути».

Попробуйте отладить

print(dirs['Subdir'][elem])

или используйте

dirs['Subdir'][elem].get('Path')
...