2014-12-31 1 views
0

또 다른 질문은 unicode_literals를 사용할 때 바이트 문자열을 subprocess.Popen으로 파이프하는 방법을 살펴 보았습니다. How to fix an encoding migrating Python subprocess to unicode_literals?. 거기에 대한 해결책은 문제를 해결하고 하위 프로세스의 stdout 문자열을 수집 할 때 경고를 생성했습니다. unicode_literals가있는 파이썬 서브 프로세스 파이프에서 문자열을 검색하는 더 좋은 방법이 있습니까?

아직 사용

: 표준 출력을 수집 할 때

from future import unicode_literals 

처음에, 나는 같은 UnicodeDecodeError의 오류가 발생했습니다. 그래서! 나의 새로운 지식을 사용하여, 나는이 서비스는 별도의 스레드에서 표준 출력 수신 코드 업데이트 :

for text in iter(popen.stdout.readline,''): 
    text = text.decode(encoding) 
    text = text.strip(' \r\n') 

이 오류를 고정,하지만 새로운 경고가 나타나

test.py:456: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal 
    for text in iter(popen.stdout.readline,''): 

을 조금 검색을 통해, 내가 발견

with warnings.catch_warnings(): 
    warnings.simplefilter("ignore") 
    for text in iter(popen.stdout.readline,''): 
     text = text.decode('utf-8') 
     text = text.strip(' \r\n') 

질문 : 불일치를 해결하는 방법이 있나요 또는이 처리하는 가장 좋은 방법을 억제되어이 같은 경고 메시지를 표시 할 수 있습니까?

+0

를'(w/유용한 경고를 억제 O를!) 하지만 유니 코드 문자열'' ''과 비교하고 있습니다. 이것은 분명히 당신의 버그입니다. 대신에'b'''을 사용하면 더 잘 작동 할 것입니다 (유용한 경고를 억제하지 마십시오!). –

+0

고마워, 알렉스. 당신이 당신의 코멘트를 대답으로 변환한다면, 나는 그것을 받아 들일 수 있고이 질문을 닫을 수 있습니다 ... 새해 복 많이 받으십시오! – tahoar

+0

완료, 답변은에 있습니다. –

답변

1

popen.stdout.readline 유니 코드 문자열이 아닌 바이트 문자열을 반환합니다. 하지만 유니 코드 문자열 ''과 비교하고 있습니다. 대신 'B'를 사용하여 더 나은 작동합니다 - : 바이트 문자열이 아닌 유니 코드 문자열을 반환 popen.stdout.readline`

for text in iter(popen.stdout.readline, b''): 
관련 문제