imhamburger 님의 블로그

파이썬(Python) - {subprocess.py:93} INFO - cut: stdin: Illegal byte sequence 에러 해결하기 본문

파이썬(Python)

파이썬(Python) - {subprocess.py:93} INFO - cut: stdin: Illegal byte sequence 에러 해결하기

imhamburger 2024. 7. 23. 18:29

맥 터미널에서 아래와 같은 코드를 사용했는데, cut: stdin: Illegal byte sequence 에러가 났었다.

cat ~/data/test.txt | cut -d' ' -f1

 

이 에러는 터미널에서 UTF-8이 아닌 다른 종류의 인코딩된 데이터를 처리하려고 할 때 발생한다.

 

*UTF-8(Unicode Transformation Format - 8-bit)은 유니코드 문자 인코딩의 한 방식으로 UTF-8은 전 세계 모든 문자를 표현할 수 있도록 설계된 가변 길이 문자 인코딩 방식이다.

 

이를 해결하기 위해서는 터미널 창에 아래 코드를 입력하면 된다.

export LC_ALL=C

 

매번 같은 에러가 난다면, 영구적으로 설정할 수도 있다. ~/.zshrc 에 위에 코드를 추가하면 된다. 그럼 매번 터미널에 칠 필요가 없다.

 

그.런.데

터미널에서 파이썬 코드를 작성할 때에도 같은 에러가 났다. 나는 이미 .zshrc에 추가해두었는데 왜 자꾸 에러가 나는지... 이해할 수 가 없었다.

 

나같은 경우는 에어플로우를 이용하면서 해당 에러가 난 것인데...

cut: stdin: Illegal byte sequence 오류가 subprocess.py를 통해 발생하고 있다면, Python 코드 내에서 환경 변수를 설정하여 해결해야 한다고 한다. 파이썬 코드 위에 다음 코드를 작성해주면 된다.

이는 Python 코드에서 실행되는 모든 하위 프로세스에 영향을 주기 때문에 이 설정을 해주고 작성하면 에러를 해결할 수 있다.

import subprocess
import os

os.environ['LC_ALL'] = 'C'

 

근데 subprocess가 뭐지?

subprocess 모듈은 Python에서 외부 명령어나 프로그램을 실행하고, 그와의 상호작용을 가능하게 하는 모듈이라고 한다.

나는 python 코드 내에서 Bash 명령어를 사용하였어서 위와 같은 에러가 났던 것이고 subprocess 를 import해야 Bash 명령어를 읽어 실행 가능하게 도와준다.

 

매일 반복되는 에러발생...^^