2015-02-08 75 views
1

我想把bash命令的输出放在一个变量中,但是我得到一个空字符串。为什么我得到一个空字符串?

import subprocess 

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

输出为:

hello world 
ok 

代替:

hello world 
hello world ok 

为什么会发生这种情况?

+1

'subprocess.check_output([“回声”,“世界你好”])'会的工作,而不需要壳=真 – 2015-02-08 13:14:55

回答

2

有一点可以想到,子流程命令添加了一个换行符。这可能是笨拙的,但试试这个:

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

是明确的:新行是由'echo'介绍本身,而不是'subprocess'模块,例如['echo -n abc'不添加换行符](http://stackoverflow.com/a/28394197/4279)(如果'echo'支持'-n'参数) – jfs 2015-02-08 16:10:03

+0

你说得对,这是值得说的。 – 2015-02-08 17:13:59

3

echo的输出包括一个换行符。其结果是写入到你的终端,输出由check_output()捕获,但你打印输出包括换行:

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

给你'hello world'' ok'两个单独的行打印时。

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

print out.strip() + ' ok' 

在某些壳,所述echo命令接受-n开关可抑制换行符:

echo -n hello world 
2

echo打印带有附加一个换行符\n文本。如果您想省略,请使用printf

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

>>> print out 
>>> 'hello world' 
相关问题