【问题标题】:which command is better: os.listdir() or os.system('ls') and WHY?哪个命令更好:os.listdir() 或 os.system('ls'),为什么?
【发布时间】:2018-07-03 21:38:05
【问题描述】:

在当前工作目录中:

import os
print( os.listdir() )

将列出文件和目录。但是,我也可以使用system 命令获取 Linux 机器当前工作目录中的文件和目录列表:

import os
print( os.system('ls') )

哪个命令更好:os.listdir()os.system('ls'),为什么?

【问题讨论】:

  • 如果你在 Windows 上运行它会怎样?
  • 这取决于你想用它做什么......如果你只是显示结果而不关心可移植性 - 或者(ls 有许多有用的显示选项)。如果你想处理数据,那么os.listdir()。注意:os.system('ls')只返回ls的退出状态,ls实际做了显示(去掉print()可以看到这个)
  • 我会选择 os.listdir() 因为它是独立于操作系统的
  • 我会选择os.listdir,因为结果是结构化数据。

标签: python directory


【解决方案1】:

os.listdir() 在 python 中原生实现,可以在任何编译 python 的操作系统上运行。

调用os.system('ls')依赖于底层操作系统有一个ls命令,这是一个疯狂的假设(例如,windows呢?),并且要求这个可执行文件在$PATH中。从性能的角度来看,您将执行另一个进程,这完全是多余的。如果你想做比打印结果更有趣的事情,你就不得不自己去解析输出。

长话短说 - 不要重新发明轮子。如果python给你一个内置的os.listdir(),就用它吧。

【讨论】:

    【解决方案2】:

    我可能在这里挖坟,但我最近遇到了类似的用法。

    我试图 ls 一个 /path/to/temp 文件。它不起作用,ls 命令会卡住且无响应,超过 5 分钟后我将其关闭。请注意,这是通过 putty 通过 SSH,我尝试了 ls -l | wc -l,但也没有用。

    len(os.listdir("path/to/temp")) 立即返回一个数字,它在75000 附近,几乎立即构建了列表。因此,如果您在具有大量后代的目录上使用 os.listdir() 与 ls 相比,则具有明显的速度优势。

    【讨论】:

      【解决方案3】:

      只是堆积:ls 对您尝试使用它的目录中的文件数量有一个开销限制。 os.listdir() 没有这样的限制。如果你可以使用它,那么os.listdir() 似乎是更好的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-22
        • 2012-06-23
        • 2021-12-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 2018-10-07
        相关资源
        最近更新 更多