이 코드를 사용하여 외부 프로그램에서 표준 출력을 얻습니다.
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
communi () 메소드는 바이트 배열을 리턴합니다.
>>> command_stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
그러나 출력을 일반 Python 문자열로 사용하고 싶습니다. 다음과 같이 인쇄 할 수 있습니다.
>>> print(command_stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
나는 그것이 binascii.b2a_qp () 메소드에 대한 것이라고 생각 했지만 시도했을 때 동일한 바이트 배열을 다시 얻었습니다.
>>> binascii.b2a_qp(command_stdout)
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
바이트 값을 다시 문자열로 어떻게 변환합니까? "배터리"를 수동으로 사용하는 대신 사용하는 것입니다. 그리고 파이썬 3에서도 괜찮기를 바랍니다.
str(text_bytes)
인코딩을 지정할 수 없기 때문에 . text_bytes의 내용에 따라 text_bytes.decode('cp1250
)` 는와 (과 ) 매우 다른 문자열을 초래할 수 있습니다 text_bytes.decode('utf-8')
.
str
함수는 더 이상 실제 문자열로 변환되지 않습니다. 어떤 이유로 든 명시 적으로 인코딩을 말해야하는 이유는 무엇입니까? 그냥 변환하고 utf-8
ur 코드가 작동하는지 확인하십시오. 예var = var.decode('utf-8')
unicode_text = str(bytestring, character_encoding)
파이썬 3. 비록 예상대로 작품은 unicode_text = bytestring.decode(character_encoding)
단지와 혼동을 피하기 위해 더 바람직하다 str(bytes_obj)
위한 텍스트 표현을 생성하는 bytes_obj
대신 텍스트로 디코딩 : str(b'\xb6', 'cp1252') == b'\xb6'.decode('cp1252') == '¶'
와str(b'\xb6') == "b'\\xb6'" == repr(b'\xb6') != '¶'
str(text_bytes)
않습니까? 이것은 나에게 기괴한 것 같습니다.