2013-03-19 61 views
3

比方說,我有一個返回一堆線,我想遍歷進程:b''哨兵在Python iter()中意味着什麼?

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''意味着什麼。

回答

3

在python3中,字符串是byteliteral。忽略python 2.

+0

我一直在編寫Python 2.x腳本,所以我不會抓到這個細節。感謝您的快速回答! – 2013-03-19 07:46:42

+0

通常和python2一起工作。在處理char值爲0-255而不是UTF符號的字符串時,偶然發現了這個問題 – Gjordis 2013-03-19 07:48:10

+0

我想指出,這樣做是不正確的。 – 2013-03-19 07:50:24

3

我會盡我所能,比我目前閱讀的更精確。 (稍微修訂版)

Python符號b'string'表示支持它的Python版本中的字節字符串字面值。 Python 2的PEP 358引入了符號,這是邁向支持unicode的一步。目前Python syntax for 2.6 does not mention the b prefixPython syntax for 2.7 does mention the b prefix。然而,PEP 358是針對Python 2.6以及我所見過的所有Python 2.6解釋器接受它的。

隨着遷移到Python 3,默認爲字符串常量從字節改爲的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' 

我希望我能激勵下列語句具有有限的有效性:

  • 在Python 3這表示一個字節的文字:是的,而且在Python 2至少從2.6版。
  • 該符號在Python 2被忽略了:這是更根本就沒有效果如果你有已經支持它,除非你(或你看看國外的代碼)進口__future__一個Python 2.0版本,只有如果你不關心與Python 3的兼容性(其中大家應該考慮並且通常針對第三方軟件)。

最短的有效答案OP的問題,在我看來,應該是:

這是字符串文字前綴,執行字節表示,而不是Unicode表示,引入了在Python 2.6,不改變Python的默認值2(但如果可以看到from __future__ import則值得關注)。