如何在Python中使用dir / s命令?

时间:2013-03-04 17:22:18

标签: python windows python-2.7 subprocess

背景

我一直在批处理文件中使用命令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模块?

5 个答案:

答案 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")