如何在Linux中使用Python搜索可执行文件?

7

如何使用Python在Linux中搜索可执行文件?这些可执行文件没有扩展名,并且与具有不同扩展名的文件放在同一个文件夹中。谢谢

编辑:我的意思是搜索所有可执行文件的文件名并将它们存储在列表或元组中。谢谢


1
在Linux下如何查找某个目录下的可执行文件? - David Wolever
3
不是完全相同的副本。这个关于 Python 的。 - Johan Lundberg
使用上面链接中提到的命令,结合subprocess.popen()函数进行编程。 - RanRag
@mikeP 你说的搜索是什么意思?看看David的评论。 - Johan Lundberg
3个回答

7

在Python中实现:

import os
import stat

executable = stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH
for filename in os.listdir('.'):
    if os.path.isfile(filename):
        st = os.stat(filename)
        mode = st.st_mode
        if mode & executable:
            print(filename,oct(mode))

1
2个备注,S_IEXECS_IXUSR的同义词。由于OP使用了IXGRPIXOTH,我建议为了一致性使用IXUSR。其次,这是搜索所有人都可以执行的文件。这意味着它可能不能被你自己执行,所以不要相信它能让你执行它(就像我刚刚在同事的代码中看到的那样,代码把我带到了这里^^)。 - Vser

2
如果您的搜索意味着列出目录中所有可执行文件,那么请使用来自此SuperUser链接的命令。您可以使用Subprocess模块在Python代码中执行命令。
import shlex   
executables = shlex.split(r'find /dir/mydir -executable -type f')
output_process = subprocess.Popen(executables,shell=True,stdout=subprocess.PIPE)

2

在一些情况下,os.access() 函数比 os.stat() 更好,因为它会检查文件是否可以被你执行,根据文件的所有者、组和权限。

import os

for filename in os.listdir('.'):
    if os.path.isfile(filename) and os.access(filename, os.X_OK):
        print(filename)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接