当我从python调用vol时错误2

时间:2015-08-31 10:13:35

标签: python

我有一个run_cmd函数,它返回我给出的命令的输出:

 def run_cmd(exe):
    p = subprocess.Popen(exe, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
    return p.communicate()[0]

我可以运行bcdedit /vformatetc等命令,但是当我调用vol C:时,如: run_cmd('vol C:)我会得到错误:
WindowsError: [Error 2] The system cannot find the file specified。 但如果我在cmd命令vol c:中运行,它就可以了 那么,我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为默认情况下subprocess.Popen需要一个可执行文件或一个代表被调用进程argv的列表,在您的情况下,它会查找实际名为{{1}的可执行文件(而不是名为"vol C:"或类似的可执行文件)。除非您指定vol.exe(这意味着shell将用于解析cmdline),否则这是:

shell=True

否则,您必须以列表形式提供命令行:

def run_cmd(cmdline):
    p = subprocess.Popen(cmdline, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell=True)
    return p.communicate()[0]

run_cmd('vol C:')

答案 1 :(得分:0)

请做一些小修改。

import subprocess
p = subprocess.Popen("vol c:", stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell=True)
print p.communicate()[0]

输出继电器

C:\Users\Administrator\Desktop>python chk.py
 Volume in drive C has no label.
 Volume Serial Number is 2A3D-7B34