任何想法是什么意思?
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
答案 0 :(得分:3)
您正在Windows上调用ls
命令,该命令没有ls
。您可以从http://gnuwin32.sourceforge.net/packages/coreutils.htm获取ls
的端口,并将其已安装的bin目录添加到您的窗口PATH
(或在您的python脚本运行时将其添加到PATH) 。如果您不知道如何执行此操作,请分别查看this和this问题。)
dir
是等效的窗口,但与ls
相比,它将打印不同格式的输出,并且可能这个调用是从目录中获取某种信息。有更好的方法在python中执行此操作。如果你可以识别它想要获取的信息(例如权限位),那么你可能能够编写一个纯python版本(或者为那些执行此操作的Windows找到一个等效的python代码段)而不依赖于外部命令。
有趣的是,subprocess.call()
只是运行命令并返回错误代码。 ls
本身只打印信息,因此如果这是意图(只是为了向用户显示控制台中的目录内容),那么您可以通过调用dir
来替换它。有时,您需要提供shell=True
作为参数,具体取决于您调用的命令。但请注意文档中的warning。如果它试图提取信息,它可能想要进行subprocess.Popen()
或subprocress.check_output()
样式调用,您实际上可以使用被调用程序的输出。
例如,如果只是获取目录中的文件/目录列表和/或它们的时间戳,那么这是获取此信息的一种非常全面的方式,它们都可以在python本身完成例如os.walk()
,os.fstat()
和Python3中的pathlib
是获取目录中文件信息的一些方法。
答案 1 :(得分:0)
您正尝试在Windows上执行ls -l
命令。 ls
仅适用于基于Unix的系统。
subprocess.call(["ls", "-l"])
如果您使用的是Windows,请尝试
subprocess.call(["dir"])
代替。
或者,您可以尝试Cygwin之类的内容。