我有一个run_cmd
函数,它返回我给出的命令的输出:
def run_cmd(exe):
p = subprocess.Popen(exe, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
return p.communicate()[0]
我可以运行bcdedit /v
,format
,etc
等命令,但是当我调用vol C:
时,如:
run_cmd('vol C:
)我会得到错误:
WindowsError: [Error 2] The system cannot find the file specified
。
但如果我在cmd
命令vol c:
中运行,它就可以了
那么,我做错了什么?谢谢!
答案 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