【问题标题】:How do I search for an executable file using python in linux?如何在linux中使用python搜索可执行文件?
【发布时间】:2012-02-15 23:27:18
【问题描述】:

如何在 linux 中使用 python 搜索可执行文件?可执行文件没有扩展名,并且与具有不同扩展名的文件一起位于一个文件夹中。谢谢

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

【问题讨论】:

  • 不完全重复。这个是关于python的
  • subprocess.popen()与上述链接中提到的命令一起使用。
  • @mikeP 你说的搜索是什么意思?看看大卫的评论。

标签: python file search


【解决方案1】:

如果通过搜索您的意思是列出目录中的所有可执行文件,而不是使用来自此SuperUser Link 的命令。您可以使用Subprocess module 来执行来自 python 代码的命令。

import shlex   
executables = shlex.split(r'find /dir/mydir -executable -type f')
output_process = subprocess.Popen(executables,shell=True,stdout=subprocess.PIPE)

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 2 备注,S_IEXECS_IXUSRsynonym。由于 OP 使用了 IXGRPIXOTH,我建议使用 IXUSR 以保持一致性。其次,搜索每个人都可执行的文件。意思是,它不能由你自己执行,所以不要相信这个相信你可以执行它(正如我刚刚在同事的代码中看到的那样,代码将我送到那里^^)
    【解决方案3】:

    函数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)
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多