2015-02-08 73 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' 
相關問題