program story

파이썬 3에서 바이너리 데이터를 stdout에 쓰는 방법은 무엇입니까?

inputbox 2020. 9. 14. 20:44
반응형

파이썬 3에서 바이너리 데이터를 stdout에 쓰는 방법은 무엇입니까?


파이썬 2.x에서는 다음과 같이 할 수 있습니다.

import sys, array
a = array.array('B', range(100))
a.tofile(sys.stdout)

그러나 이제 나는 TypeError: can't write bytes to text stream. 사용해야하는 비밀 인코딩이 있습니까?


더 나은 방법 :

import sys
sys.stdout.buffer.write(b"some binary data")

import os
os.write(1, a.tostring())

또는 os.write(sys.stdout.fileno(), …)그것이 1당신 보다 더 읽기 쉬운 경우 .


Python 3에서만 사용할 수있는 관용적 인 방법은 다음과 같습니다.

with os.fdopen(sys.stdout.fileno(), "wb", closefd=False) as stdout:
    stdout.write(b"my bytes object")
    stdout.flush()

좋은 부분은 파이썬에서 모두가 익숙한 일반 파일 객체 인터페이스를 사용한다는 것입니다.

블록을 종료 할 때 closefd=False닫히지 않도록 설정 sys.stdout하고 with있습니다. 그렇지 않으면 프로그램이 더 이상 stdout으로 인쇄 할 수 없습니다. 그러나 다른 종류의 파일 설명 자의 경우 해당 부분을 건너 뛸 수 있습니다.


python3에서 인코딩을 지정하려면 아래와 같이 bytes 명령을 계속 사용할 수 있습니다.

import os
os.write(1,bytes('Your string to Stdout','UTF-8'))

여기서 1은 stdout-> sys.stdout.fileno ()에 해당하는 일반적인 숫자입니다.

그렇지 않으면 인코딩에 신경 쓰지 않으면 다음을 사용하십시오.

import sys
sys.stdout.write("Your string to Stdout\n")

인코딩없이 os.write를 사용하려면 아래를 사용해보십시오.

import os
os.write(1,b"Your string to Stdout\n")

참고 URL : https://stackoverflow.com/questions/908331/how-to-write-binary-data-to-stdout-in-python-3

반응형