将命令输出重定向到字符串 - Python 3.4.3 - 不适用于新版本

Redirecting command output to a string - Python 3.4.3 - Not working on the new version

我正在使用 Python 3.4.3。我想做的是,将 cmd 命令的输出存储到变量中,而不将其打印到命令行中。 Here 我找到了答案,但它适用于旧版本,但在 3.4.3 上,变量 "var" 包含一些随机字符。例如,如果我尝试使用命令 "dir" 对其进行测试,它会打印出一团糟。

import subprocess
from subprocess import Popen, PIPE
var = subprocess.Popen(COMMAND, stdin = PIPE, stdout = PIPE, stderr = PIPE).communicate()[1]
print(var)

如果我理解得很好,你只想 运行 一个外部命令并将输出放入一个变量中。

import subprocess

def foo():
    return subprocess.Popen(COMMAND.split(), stdout=subprocess.PIPE).communicate()[0]

来自子流程文档:

Replacing /bin/sh shell backquote
---------------------------------
output=`mycmd myarg`
==>
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]

请注意 COMMAND.split() 有点……棘手。例如:

var1 = subprocess.Popen(['echo', '"Hey', 'Whosebug!"'], stdout=subprocess.PIPE).communicate()[0]
# String contained in var1: "Hey Whosebug!"\n
var2 = subprocess.Popen(['echo', 'Hey Whosebug!'], stdout=subprocess.PIPE).communicate()[0]
# String contained in var2: Hey Whosebug!\n
var1 != var2
# True

subprocess.check_output 做你想做的事: https://docs.python.org/2/library/subprocess.html#subprocess.check_output