python - 子进程调用 ls 时出错

标签 python windows subprocess ls dir

知道错误想表达什么吗?

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    subprocess.call(["ls", "-l"])
  File "D:\Python27\lib\subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "D:\Python27\lib\subprocess.py", line 710, in __init__
    errread, errwrite)
  File "D:\Python27\lib\subprocess.py", line 958, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

最佳答案

您正在 Windows 上调用 ls 命令,该命令没有 ls。您可以从http://gnuwin32.sourceforge.net/packages/coreutils.htm获取适用于Windows的ls端口。并将其安装的 bin 目录添加到您的 Windows PATH (或在 python 脚本运行时将其添加到 PATH 中。如果您不知道如何执行此操作,请参阅 thisthis 问题分别)。

dir 与 Windows 等效,但与 ls 相比,它会打印不同格式的输出,并且大概,此调用是从目录中获取某种信息。在 python 中,有更好的方法可以做到这一点。如果您可以确定它试图获取哪些信息(例如权限位),那么您也许可以编写一个纯 python 版本(或者为 Windows 找到一个等效的 python 代码片段来执行此操作),而不依赖于外部命令。

有趣的是,subprocess.call() 只是运行命令并返回错误代码。 ls 本身只是打印信息,因此如果这是意图(只是为了在控制台中向用户显示目录的内容),那么您可以将其替换为对 dir 的调用。有时,您需要提供 shell=True 作为参数,具体取决于您调用的命令。关注warning但在文档中。如果它试图提取信息,它可能想要执行 subprocess.Popen()subprocess.check_output() 样式调用,您实际上可以在其中使用被调用程序的输出。

例如,如果只是获取目录中的文件/目录列表和/或其时间戳,那么这是获取此信息的一种非常迂回的方式,并且它们都可以在 python 本身中完成例如os.walk() , os.fstat() ,在 Python3 中,pathlib有一些方法可以获取目录中的文件信息。

关于python - 子进程调用 ls 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25090981/

相关文章:

python - 如何比较两个列表中一个列表中有重复的项目?

windows - 如何在 C/C++ 中以编程方式在外部 USB HD 上启用 "Better Performance"

windows - 如何检查 Windows 防火墙中的规则?

python - 在 Python 中提取 URL

python - Anaconda ImportError : libSM. so.6: 无法打开共享对象文件: 没有那个文件或目录

python - 关于 Python 元组解包的说明

asp.net - 我需要什么来设置可以在没有 Visual Studio 的情况下构建 ASP.NET 项目的 Jenkins 构建服务器?

python - 检查特定的 Python 脚本是否已在运行

python - 如何将 subprocess.call() 输出推送到终端和文件?

python - 使用 Plink (PuTTy) 通过 Python 进行 SSH