Python 中的 Stat 命令问题,如何更正错误?

Stat command problem in Python, how can I correct the error?

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

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")