问题描述
早上好,我在大学做一份工作,他们给我这个命令是为了搜索一个地址的所有文件,并找到你有权为“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")