知道错误想说什么吗?
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
您正在呼叫ls
Windows 上的命令,没有ls
。你可以抢一个端口ls
对于窗户从http://gnuwin32.sourceforge.net/packages/coreutils.htm http://gnuwin32.sourceforge.net/packages/coreutils.htm并将其安装的 bin 目录添加到您的 WindowsPATH
(或者在 python 脚本运行时将其添加到 PATH 中。如果您不知道如何执行此操作,请参阅this https://stackoverflow.com/questions/9546324/adding-directory-to-path-environment-variable-in-windows and this https://stackoverflow.com/questions/1681208/python-platform-independent-way-to-modify-path-environment-variable/1681244#1681244分别提问)。
dir
与 Windows 等效,但与以下版本相比,它会打印不同格式的输出ls
,并且据推测,此调用是为了从目录中获取某种信息。在 python 中,有更好的方法可以做到这一点。如果您可以确定它试图获取哪些信息(例如权限位),那么您也许可以编写一个纯 python 版本(或者找到一个等效的用于 Windows 的 python 片段来执行此操作),而不依赖于外部命令。
有趣的是,subprocess.call()
只需运行命令并返回错误代码。ls
本身只是打印信息,所以如果这是意图(只是为了在控制台中向用户显示目录的内容),那么您可以将其替换为调用dir
。有时,您需要提供shell=True
作为参数,具体取决于您调用的命令。注意warning https://docs.python.org/2/library/subprocess.html#frequently-used-arguments但在文档中。如果它试图提取信息,它可能想做一个subprocess.Popen()
or subprocress.check_output()
样式调用,您实际上可以在其中使用被调用程序的输出。
例如,如果只是获取目录中的文件/目录列表和/或其时间戳,那么这是获取此信息的一种非常迂回的方式,并且它们都可以在 python 本身中完成,例如os.walk() https://docs.python.org/2/library/os.html#os.walk, os.fstat() https://docs.python.org/2/library/os.html#os.stat,而在Python3中,pathlib https://docs.python.org/3/library/pathlib.html#有一些方法可以获取目录中的文件信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)