我想把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