为什么我得到一个空字符串?
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.
我想将 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.