关于Windows:如何在python中使用dir/s命令?

How to use the dir/s command in Python?

背景

我一直在批处理文件中使用命令dir/s。但是,我不能用Python来调用它。注意:我使用的是python 2.7.3。

代码

1
2
import subprocess
subprocess.call(["dir/s"])

错误信息

1
2
3
4
5
6
7
8
9
10
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

我试过修改报价单,但没用。

如何使用subprocess调用dir/s模块?


怎么样

1
subprocess.call("dir/s", shell=True)

未经验证。


这与你的要求大不相同,但它解决了同样的问题。此外,它以一种多平台的方式解决了这个问题:

1
2
3
4
5
6
7
8
9
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


我终于找到了答案。要列出目录(如D:\\C:\\中的所有目录,首先需要导入os模块。

1
import os

然后,他们需要说他们想列出所有的东西。在这个过程中,他们需要确保输出被打印出来。

1
2
3
for top, dirs, files in os.walk('D:\'):
    for nm in files:      
        print os.path.join(top, nm)

这就是我解决问题的方法。多亏了这一点。


dir/s之间需要一个空格。所以把它分成2个元素的数组。正如carlosdoc指出的,您需要添加shell=true,因为dir命令是shell内置的。

1
2
import subprocess
subprocess.call(["dir","/s"], shell=True)

但是,如果您试图获得目录列表,可以使用os模块中的可用功能(如os.listdir()os.chdir()使其独立于操作系统。


因为它是命令行的一个内置部分,所以您需要以以下方式运行它:

1
2
import subprocess
subprocess.call("cmd /c dir /s")