2013-03-19 1 views
3

이의 내가 통해 반복 할 행의 무리를 반환하는 과정 있다고 가정 해 봅시다 :파이썬 iter()에서 b ''의 센티널은 무엇을 의미합니까?

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'' 통과 곳 iter()에 대한 감시 인수는,이 예에서 무엇입니까? 나는 그 자체로 ''을 이해한다고 생각한다. 나는 빈 줄을 반복하는 것을 멈춘다. 그러나 나는 무엇을 의미하는지 모르겠다. b''.

답변

3

python3에서 문자열은 byteliteral입니다. 파이썬 2에서는 무시됩니다.

+0

필자는 Python 2.x 스크립트를 작성하여이 세부 사항을 파악하지는 못했습니다. 빠른 답변 주셔서 감사합니다! –

+0

보통 파이썬 2와 함께 작동합니다. UTF 기호 대신 char 값 0-255를 사용하여 문자열을 처리 할 때 우연히 마주 쳤습니다. – Gjordis

+0

이 방법을 사용하는 것이 올바른 것은 아니라고 지적하고 싶습니다. –

3

나는 지금까지 읽은 것보다 더 정확하게하려고 노력할 것입니다. (약간 수정 된 버전)

파이썬 표기법 b'string'은 파이썬 버전을 지원하는 바이트 문자열 리터럴을 나타냅니다. 이 표기법은 유니 코드 지원으로 이전하기위한 단계로 Python 2에 PEP 358으로 도입되었습니다. 현재 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 해석기 용이었습니다. 문자열 리터럴 파이썬 3로 마이그레이션와

기본유니 코드바이트 변경. 그러나 마이그레이션을 쉽게하기 위해 __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' 

나는 나는 다음과 같은 문장이 제한된 유효 기간을 가지고 동기를 부여 할 수 희망 :

이 바이트 문자 의미 파이썬 3에서
  • : 네,하지만 파이썬이 적어도 이후 버전 2.6 .
  • 이 표기법은 파이썬 2에서 무시됩니다 : 당신이 이미와 하지 않는 한 (또는 당신이 보는 외국 코드) 수입 __future__을 지원하는 파이썬 2 버전이 경우 아무런 효과가 없다는 것을 더 그리고에만 해당됩니다 (모두를 고려해야하며 제 3 자 소프트웨어에서 자주 사용함).

영업의 질문에 짧은 유효 응답, 내보기에, 다음과 같습니다

이 파이썬 2.6, 유니 코드 표현에 반대 도입으로, 바이트 표현을하지 적용, 문자열 리터럴에 대한 접두어 파이썬 2의 파이썬 기본값 변경 (그러나 from __future__ import을 볼 수 있다면주의해야합니다).

관련 문제