背景
我一直在批处理文件中使用命令dir/s
。但是,我无法使用python调用它。 注意:我使用的是Python 2.7.3。
代码
import subprocess
subprocess.call(["dir/s"])
错误消息
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
subprocess.call(["dir/s"])
File "C:\Python27\lib\subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 896, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
我试过更改引文但没有任何效果。
如何使用dir/s
调用subprocess
模块?
答案 0 :(得分:6)
怎么样
subprocess.call("dir/s", shell=True)
未经核实。
答案 1 :(得分:3)
这与您提出的要求有很大不同,但它解决了同样的问题。此外,它以pythonic,multiplatform方式解决它:
import fnmatch
import os
def recglob(directory, ext):
l = []
for root, dirnames, filenames in os.walk(directory):
for filename in fnmatch.filter(filenames, ext):
l.append(os.path.join(root, filename))
return l
答案 2 :(得分:1)
您需要dir
和/s
之间的空格。所以把它分成2个元素的数组。同样正如carlosdoc指出的那样,你需要添加shell = True,因为dir
命令是内置的shell。
import subprocess
subprocess.call(["dir", "/s"], shell=True)
但是,如果您正在尝试获取目录列表,请使用os
模块中的可用功能(例如os.listdir()
,os.chdir()
答案 3 :(得分:1)
我终于找到了答案。要列出目录中的所有目录(例如D:\\
,C:\\
),需要先导入os
模块。
import os
然后,他们需要说他们想要列出所有内容。在其中,他们需要确保打印输出。
for top, dirs, files in os.walk('D:\\'):
for nm in files:
print os.path.join(top, nm)
这就是我能够解决它的方式。感谢this.
答案 4 :(得分:-1)
由于它是命令行的内置部分,您需要将其作为:
运行import subprocess
subprocess.call("cmd /c dir /s")