为什么我得到一个空字符串?

Why I am getting an empty string?

我想将 bash 命令的输出放在一个变量中,但我得到一个空字符串。

import subprocess

out = subprocess.check_output("echo hello world", shell=True)
print out + ' ok'

输出是:

hello world
 ok

而不是:

hello world
hello world ok

为什么会这样?

echo 的输出包含换行符。结果是 not 写入您的终端,输出由 check_output() 捕获,但您随后打印包括换行符的输出:

>>> import subprocess
>>> out = subprocess.check_output("echo hello world", shell=True)
>>> out
'hello world\n'

打印时在两行中为您提供 'hello world'' ok'

之后你可以删除换行符;使用 str.strip() 将从字符串的开头和结尾删除 all 空格,例如:

print out.strip() + ' ok'

在某些 shell 上,echo 命令使用 -n 开关来抑制换行符:

echo -n hello world

想到的一件事是子进程命令添加一个换行符。它可能很笨拙,但试试这个:

print out.rstrip('\n') + ' ok'

echo 打印带有新行字符 \n 的文本。如果您想省略它,请改用 printf

>>> import subprocess
>>> out = subprocess.check_output("printf 'hello world'", shell=True)

>>> print out
>>> 'hello world'

您通过调用 check_output 捕获了输出。根据文档 https://docs.python.org/2/library/subprocess.html#subprocess.check_output

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
    Run command with arguments and return its output as a byte string.