Python脚本在不同的虚拟机中不起作用

时间:2019-05-09 10:47:43

标签: python python-3.5

我有一个脚本可以清除确定路径中的日志。

此脚本可在一台虚拟机中运行,但是当我导出到另一台虚拟机时,此脚本不起作用。 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 :(得分:0)

elem中没有“路径”。

尝试调试

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

或使用

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

答案 1 :(得分:0)

可能使东西依赖的一件事是您在其中手动连接文件路径

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

但是,“ /”可能并非在所有设备上都有效。相反,最好在python中使用os.path模块来连接路径。这将自动选择正确的分隔符。

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

这至少会使代码平台的这一部分独立。

另外,通过os.path.normpath传递您的输入将确保将输入正确解析为平台上可读的内容。