如何在Windows上使用带有内置命令的subprocess.Popen

时间:2016-09-27 05:23:07

标签: python windows python-2.7 command-line subprocess

在我的旧python脚本中,我使用以下代码显示Windows cmd命令的结果:

print(os.popen("dir c:\\").read())

正如python 2.7文档所说,os.popen已过时,建议使用subprocess。我按照文档:

result = subprocess.Popen("dir c:\\").stdout

我收到错误消息:

WindowsError: [Error 2] The system cannot find the file specified

您能告诉我使用subprocess模块的正确方法吗?

3 个答案:

答案 0 :(得分:4)

您应该使用subprocess.Popen拨打shell=True,如下所示:

import subprocess

result = subprocess.Popen("dir c:", shell=True,
                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)

output,error = result.communicate()

print (output)

More info on subprocess module.

答案 1 :(得分:0)

这在Python 3.7中有效:

from subprocess import Popen, PIPE

args = ["echo", "realtime abc"]
p = Popen(args, stdout=PIPE, stderr=PIPE, shell=True, text=True)

for line in p.stdout:
    print("O=:", line)

输出:

O =:“实时abc”

答案 2 :(得分:-1)

尝试:

p = subprocess.Popen(["dir", "c:\\"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
outputs = p.communicate()

请注意,communicate()会返回元组(stdoutdata, stderrdata),因此outputs[0]stdout条消息,outputs[1]stderr消息。