b'';Python iter()中的sentinel平均值?

b'';Python iter()中的sentinel平均值?,python,Python,假设我有一个进程,它返回一堆行,我想迭代这些行: 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 在本例中,我将值b''传递给se

假设我有一个进程,它返回一堆行,我想迭代这些行:

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

在本例中,我将值
b''
传递给sentinel参数,该参数执行什么操作?我想我自己就理解了
'
——我不再在空行上重复——但我不知道
b'
是什么意思

在python3中,字符串是byteliteral。在Python2中被忽略。

我将尽最大努力比目前所读的内容更精确。(略为修订的版本)

Python符号
b'string'
表示Python版本中支持的字节字符串文本。Python2引入了这种表示法,作为向unicode支持迁移的一个步骤。电流和电流同时变化。然而,PEP358是为Python2.6设计的,我看到的所有Python2.6解释器都接受它

随着向Python 3的迁移,字符串文本的默认值从字节更改为unicode。然而,引入了新的方法来简化迁移。下面说明了与字符串文字有关的效果

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'
我希望我能激发以下陈述的有限有效性:

  • 在Python3中,这表示字节文字:是的,但在Python2中也是如此,至少从2.6版开始
  • 在Python2中,这个符号被忽略了:更重要的是,如果您有一个已经支持它的Python2版本,并且只有在您不关心与Python3的兼容性的情况下,您(或您看到的外来代码)才导入
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(每个人都应该考虑,这通常是针对第三方软件)。
在我看来,对OP问题的最短有效答案是:


这是字符串文本的前缀,强制使用字节表示法而不是unicode表示法,在Python 2.6中引入,并没有更改Python 2的Python默认值(但如果可以看到来自未来导入的
,则值得注意).

我一直在编写Python 2.x脚本,所以我不会抓住这个细节。谢谢你的快速回答!我通常也会使用Python 2。只是在处理字符值为0-255而不是UTF符号的字符串时遇到了这个问题。我想指出,这样做是不正确的。请教育我们@ClassStackerI have pro提供了另一个答案。我希望@Alex Reynolds对此表示赞赏。