假设我有一个返回一堆行的进程,我想迭代它们:
import subprocess
myCmd = ['foo', '--bar', '--baz']
myProcess = subprocess.Popen(myCmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for myLine in iter(myProcess.stdout.readline, b''):
print myLine
iter()
的哨兵参数在这个示例中做了什么,我将值b''
传递给它?我想我自己理解''
- 我停止迭代一个空行 - 但我不知道b''
是什么意思。
答案 0 :(得分:4)
在python3中,字符串是byteliteral。在python 2中被忽略。
答案 1 :(得分:3)
我会尽力比我到目前为止读到的更准确。 (略有修订版)
Python表示法b'string'
表示Python版本中支持它的字节字符串文字。已经为Python 2引入了PEP 358符号,作为向unicode支持迁移的一个步骤。 Python syntax for 2.6 does not mention the b
prefix时的当前Python syntax for 2.7 does mention the b
prefix。但是,PEP 358适用于Python 2.6和我见过的所有Python 2.6解释器。
迁移到Python 3后,字符串文字的默认从 byte 更改为 unicode 。但是,__future__
module是为了简化迁移而引入的。以下说明了字符串文字的效果。
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'abc'
'abc'
>>> b'abc'
'abc'
>>> from __future__ import unicode_literals
>>> 'abc'
u'abc'
>>> b'abc'
'abc'
我希望我可以激励以下陈述的有效性有限:
__future__
并且通常针对第三方软件。)在我看来,OP问题的最短有效答案是:
这是字符串文字的前缀,强制执行字节表示而不是在Python 2.6中引入的unicode表示,而不是更改Python 2的Python默认值(但是如果from __future__ import
则需要注意可以看出。)