我想把bash命令的輸出放在一個變量中,但是我得到一個空字符串。爲什麼我得到一個空字符串?
import subprocess
out = subprocess.check_output("echo hello world", shell=True)
print out + ' ok'
輸出爲:
hello world
ok
代替:
hello world
hello world ok
爲什麼會發生這種情況?
我想把bash命令的輸出放在一個變量中,但是我得到一個空字符串。爲什麼我得到一個空字符串?
import subprocess
out = subprocess.check_output("echo hello world", shell=True)
print out + ' ok'
輸出爲:
hello world
ok
代替:
hello world
hello world ok
爲什麼會發生這種情況?
有一點可以想到,子流程命令添加了一個換行符。這可能是笨拙的,但試試這個:
print out.rstrip('\n') + ' ok'
是明確的:新行是由'echo'介紹本身,而不是'subprocess'模塊,例如['echo -n abc'不添加換行符](http://stackoverflow.com/a/28394197/4279)(如果'echo'支持'-n'參數) – jfs 2015-02-08 16:10:03
你說得對,這是值得說的。 – 2015-02-08 17:13:59
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
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.
'subprocess.check_output([「回聲」,「世界你好」])'會的工作,而不需要殼=真 – 2015-02-08 13:14:55