>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
이 통신하십시오 () 메서드를 배열입니다 되돌려줍니다 바이트입니다:
>>> 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'
그러나 I&; d like to # 39 로 출력물에는 작동합니까 표준 파이썬 구체화하십시오. 내가 이를 출력할 수 있도록 다음과 같습니다.
>>> 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(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'
How do I 변환하십시오 바이트입니다 값을 다시 구체화하십시오? 내 말은, name. domain. " batteries"; 대신 그렇게 합니다. # 39 와 같은 Python& nbsp; 3; d I& 수 있도록, 괜찮습니다.
[1]: http://docs.python.org/3.0/library/binascii.html = b2a # binascii.b2a_qp 강조표시할?
PY3K = sys.version_info >= (3, 0)
lines = []
for line in stream:
if not PY3K:
lines.append(line)
else:
lines.append(line.decode('cp437'))
영어가 아닌 '의' cp437 문자로 변환할 수 있기 때문에, 앞으로 심볼에는 인코딩입니다 알 수 없습니다. (영문 번역 및 UTF-8 인코딩을 않습니다를 존재하기 때문에 대부분의 싱글바이트).
Utf-8 은 임의의 이진 대한 입력입니다 디코딩 안전하지 않은 수도 있으므로 afaq afnor:
>>> b'\x00\x01\xffsd'.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 2: invalid
start byte
이는 당시 인기 (기본값입니다?) ',' latin-1 동일하게 적용됩니다. 위한 파이썬 2. [2] - [코드 페이지 레이아웃] 부족한 점을 볼 수 있는 '아닌' 여기가 파이썬 초크 범위 내에 있는 악명 높은 순서.
업데이트 20150604*: 파이썬 3 은 '수호가테스카피 오류가 있다는 소문이 들린다' 를 위한 전략 및 충돌 테스트를 필요로 하고 있지만, 데이터 손실 없이 물건을 인코딩입니다 이진 데이터 변환, ' [이진] - >. [str] - >. [이진] '또한 성능 및 안정성을 검증할 수 있습니다.
업데이트 20170116*: 덕분에 의해 주석문입니다 네이루 가능성도 있다. '오류' 박슬라시레프리스 처리기에서 함께 모든 알 수 없는 바이트입니다 이스케이프입니다 대폭 절감할 수 있습니다. 파이썬 대해서만 사용할 수 있는 3 도왔으매 심지어 다른 파이썬 버전을 계속 출력입니다 해결하십시오 대체하십시오 일치하지 않는 것입니다.
PY3K = sys.version_info >= (3, 0)
lines = []
for line in stream:
if not PY3K:
lines.append(line)
else:
lines.append(line.decode('utf-8', 'backslashreplace'))
지켜보리니 [Python 의 유니코드 지원] [3] 자세한 내용은.
# --- preparation
import codecs
def slashescape(err):
""" codecs error handler. err is UnicodeDecode instance. return
a tuple with a replacement for the unencodable part of the input
and a position where encoding should continue"""
#print err, dir(err), err.start, err.end, err.object[:err.start]
thebyte = err.object[err.start:err.end]
repl = u'\\x'+hex(ord(thebyte))[2:]
return (repl, err.end)
codecs.register_error('slashescape', slashescape)
# --- processing
stream = [b'\x80abc']
lines = []
for line in stream:
lines.append(line.decode('utf-8', 'slashescape'))
[2]: https://en.wikipedia.org/wiki/ISO/IEC_8859-1 # Codepage_layout [3]: https://docs.python.org/3/howto/unicode.html # 파이썬 유니코드 지원을 한다.
[In 파이썬 3] [1],, '는' " 기본값입니다 인코딩입니다 utf-8" 수 있도록 직접 사용:
b'hello'.decode()
것과 같습니다
b'hello'.decode(encoding="utf-8")
반면, [in 파이썬 2], [2] 인코딩입니다 기본적으로 기본값입니다 구체화하십시오 인코딩입니다. 따라서 콩지름에:
b'hello'.decode(encoding)
여기서 '인코딩입니다 "는 인코딩입니다 운영까지도.
[ Note:] [2] 에 대한 지원, nbsp, 2.7 Python& 키워드 인수만 에 추가되었다.
[1]: https://docs.python.org/3/library/stdtypes.html # 비트러스데코드 [2]: https://docs.python.org/2.7/library/stdtypes.html # 스트리지코드
실제로 이 스맥랜드의 한다고 생각합니다.
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
>>> command_text = command_stdout.decode(encoding='windows-1252')
# 39 의 @Aaron Maenpaa& 오토메이티드 작동을 동안 사용자 [최근] [2]:
>. 더 간단하게 유지됩니까 운행에서어떠한? & # 39, & # 39, 이데코드 프한트드프리드 () (ASCII" ";) [.] # 39 의 it& so long!
사용할 수 있습니다.
command_stdout.decode()
'디코딩합니다 ()' 는 [표준 인수] [3]:
>. '고데치스데코드 (obj, 인코딩입니다 = & # 39, & # 39,, # 39 utf-8& 오류뿐만 = strict& # 39;)'
[2]: # comment55151210_33688948 https://stackoverflow.com/questions/33688837/urllib-for-python-3/33688948 [3]: https://docs.python.org/3/library/stdtypes.html # 바이트입니다 및 bytearray 운영체
이후, you have a 보다 직접적인 정보를 묻는 질문에 '이 실제로 사용할 수 있는 하위' 출력입니다 외곽진입 허용합니다 [ 인코딩입니다 ] '이후' Popen (https://docs.python.org/3/library/subprocess.html # 자주 사용되는 인수만) 키워드 (python 에서 3.6+):
>>> from subprocess import Popen, PIPE
>>> text = Popen(['ls', '-l'], stdout=PIPE, encoding='utf-8').communicate()[0]
>>> type(text)
str
>>> print(text)
total 0
-rw-r--r-- 1 wim badger 0 May 31 12:45 some_file.txt
다른 사용자를 위한 것이 일반적인 대답 바이트입니다 디코딩합니다 텍스트:
>>> b'abcde'.decode()
'abcde'
인수 없이 ['시s.제더포텐코딩 ()'] (https://docs.python.org/3/library/sys.html # 시s.제더포텐코딩) 가 사용됩니다. 데이터가 없는 경우 '시s.제더포텐코딩 관심용 인코딩입니다 명시적으로 지정해야 합니다 ()' 의 ['디코딩합니다'] (https://docs.python.org/3/library/stdtypes.html # 비트러스데코드) 문의:
>>> b'caf\xe9'.decode('cp1250')
'café'
텍스트 파일로 알고 바이트 순서를 해석할 수 있습니다 해당 문자 인코딩:
unicode_text = bytestring.decode(character_encoding)
예:
>>> b'\xc2\xb5'.decode('utf-8')
'µ'
'ls' 명령어를 해석할 수 있는 텍스트, t # 39 can& 출력됩니다. 파일 이름 unix 에서 b& # 39 를 제외한 모든 일련의 바이트입니다 슬래시 (slash), '수', 제로 / # 39.
>>> open(bytes(range(0x100)).translate(None, b'\0/'), 'w').close()
Utf-8 인코딩을 사용하는 등 '수프' 이니고데데코디로어 바이트입니다 디코딩합니다 하는 의문이 제기됐다.
더 악화될 수 있다. 이 디코딩 장애가 발생할 경우 자동으로 지속되었고, [글자 깨짐] (https://en.wikipedia.org/wiki/Mojibake) 잘못 사용할 경우 호환되지 않는 인코딩입니다:
>>> '—'.encode('utf-8').decode('cp1252')
'—'
하지만 여전히 비인식 프로그램에 오류가 있는 데이터가 손상됨 발생했습니다.
일반적으로 어떤 문자 인코딩 에 포함되지 않은 바이트 순서를 사용할 수 있다. 이 정보 아웃오브밴드 통신하도록 있습니다. 일부 결과를 짐작할 수 있는 '가 될 가능성이 더 크다고, 따라서 다른 디바이스보다 카르데' 모듈에서는 문자 인코딩. 여러 다른 위치에서 하나의 문자 인코딩 파이썬 스크립트를 사용할 수 있습니다.
'ls' 를 사용하여 ['오스릭프스데코드 ()' 는 파이썬 문자열 출력 변환할 수 있습니다. [우네코다블 대해서도 성공할 수 있는 기능을] () 파일] (https://www.python.org/dev/peps/pep-0383/) (사용한다 '시s.제피리시스템렌코딩 수호가테스카피 오류 처리기 ()' 와 '에서' Unix):
import os
import subprocess
output = os.fsdecode(subprocess.check_output('ls'))
' ()' 은 원래 바이트입니다 세스페센코드 afaq 사용할 수 있습니다.
'진정한' 다음 '=' 는 하위 매개변수입니다 universal_newlines 전달하는 경우 '로카레이제프레퍼덴코딩 디코딩합니다 바이트입니다 (False)' 을 할 수 있다 (예: '에서' cp1252 indows.
작업을 바이트 스트림을 디코딩할 수 ['리오티스티우라프 ()'] (https://docs.python.org/3/library/io.html # 리오티스티우라프) 사용할 수 있습니다. [예] (https://stackoverflow.com/a/25945031/4279).
다른 문자를 나타내기 위해 다른 명령을 사용할 수 있습니다. 예를 들어, '출력입니다 dir 명령 (' cmd ')' 의 내부 cp437 사용할 수 있습니다. 디코딩합니다 수 있다. 출력입니다 전날에약혼자에게 통과할 수 있는 인코딩입니다 명시적으로 (파이썬 3.6+):
output = subprocess.check_output('dir', shell=True, encoding='cp437')
'오스트리스타디르 ()' (Windows 사용하는 파일 이름이 다를 수 있습니다. 예를 들어, '& # 39, 유니코드 apiu) # 39, & # 39 을 (를)', '\xb6& 대체할 수 있습니다.' s # 39 -python& \x14& # 39;;
U + 00B6 (& # 182;). 임의의 유니코드 문자를 지원할 수 있는 파일 이름은 https://stackoverflow.com/q/33936074/4279 참조
Windows 에서 데이터를 처리하는 경우, 내 대답은 시스템 (\r\n '와' 선 끝)
String = Bytes.decode("utf-8").replace("\r\n", "\n")
왜? 이 시도하시겠습니까 수신기마다 multiline 린퍼트.t스트:
Bytes = open("Input.txt", "rb").read()
String = Bytes.decode("utf-8")
open("Output.txt", "w").write(String)
네 모든 줄 끝이 두 배로 높아진다는 등 추가 빈 (\r\r\n '를') 이다. # 39 의 텍스트 읽기 python& 일반적으로 '\n' 만 사용할 수 있도록 기능을 정상화 문장열 선 끝. 이진 데이터를 받을 경우, 파이썬 Windows 시스템에서 그렇게 할 수 있는 기회가 있지 않습니다. 따라서
Bytes = open("Input.txt", "rb").read()
String = Bytes.decode("utf-8").replace("\r\n", "\n")
open("Output.txt", "w").write(String)
원본 파일을 복제하는 것이다.
I made a 함수은 바뀌엇어요 청소하려면
def cleanLists(self, lista):
lista = [x.strip() for x in lista]
lista = [x.replace('\n', '') for x in lista]
lista = [x.replace('\b', '') for x in lista]
lista = [x.encode('utf8') for x in lista]
lista = [x.decode('utf8') for x in lista]
return lista
def byte_to_str(bytes_or_str):
if isinstance(bytes_or_str, bytes): # Check if it's in bytes
print(bytes_or_str.decode('utf-8'))
else:
print("Object not of byte type")
byte_to_str(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')
출력:
total 0
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
이진 데이터 읽기 / 쓰기 위해, 또는 에서 사용하는 표준 바이너리 스트리밍합니다 밑에 있는 것을 의미한다. 예를 들어, stdout, 사용 '을 쓰기 바이트입니다 시s.스트더t.부퍼트라이트 (b& # 39, abc& # 39;)'.
뿐만 아니라 모든 바이트입니다 변환할지 스케쳐내 변환할 문자열을 바이트입니다:
with open("bytesfile", "rb") as infile:
str = base64.b85encode(imageFile.read())
with open("bytesfile", "rb") as infile:
str2 = json.dumps(list(infile.read()))
그러나 매우 효율적인 아니다. 이 사진 9 로 발쿰치로 2gb/s MB 입니다.
, &Quot 셸 명령을 실행할 수 있으며, 특정 사용자의 경우, 그 대신 텍스트로 출력입니다 bytes" 콩지름에 ['서브프록스트런'] [1] 에서 3.7, 파이썬 및 통과 = True 'text' (= 진정한 '아니라' capture_output 캡처하려면 출력물에는)
command_result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
command_result.stdout # is a `str` containing your program's stdout
예전에는 'text' '및' (뭐, 앨리어스) 의 파이썬 3.7 불렀으매 universal_newlines 바뀌었다. 파이썬 버전을 지원할 수 있는 universal_newlines 스케쳐내 전에 '진정한' 진정한 '대신' 텍스트 = = 3.7 전달하십시오
[1]: https://docs.python.org/3/library/subprocess.html # 서브프록스트런