知道错误想表达什么吗?
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 中。如果您不知道如何执行此操作,请参阅 this 和 this 问题分别)。
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/