Python 中的 Stat 命令问题,我该如何纠正错误?

问题描述

早上好,我在大学做一份工作,他们给我这个命令是为了搜索一个地址的所有文件,并找到你有权为“others”组执行的文件

def permisosX(): 

    mypath = "/home/milax"
    from os import listdir
    from os.path import isfile,join
    onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath,f))]
    for f in onlyfiles:
      aux = os.stat(f).st_mode
      if ((aux & stat.S_IXOTH)):
        print(f)

当我在与 .py 程序相同的地址运行时它工作正常,但如果程序被保存并在“mypath”以外的其他地址运行,则会出现错误。为什么会这样?无论保存在哪里,如何修复它以便在任何地方工作?

谢谢

解决方法

如果 mypath 不是当前目录,则您需要将其包含在对 stat() 的调用中:

aux = os.stat(join(mypath,f)).st_mode

您可能还想将其包含在打印语句中。

,

@John Gordon 是对的。

您缺少的是 aux = os.stat(f).st_mode 行中的连接。

另一种修复它并显示绝对路径的方法是编写

onlyfiles = [join(mypath,f) for f in listdir(mypath) if isfile(join(mypath,f))]

不过,我建议使用 pathlib

以更现代的方式重写整个代码
import stat
import pathlib

def permisosX(mypath):
    files = pathlib.Path(mypath).glob("*")
    onlyfiles = [f for f in files if f.is_file()]
    for f in onlyfiles:
      aux = f.stat().st_mode
      if ((aux & stat.S_IXOTH)):
        print(str(f))

permisosX(".")
permisosX("/home/milax")