파이썬에서 os 명령어를 실행하는 프로그램을 작성하고 실행할때, 때때로 아래와 같은 오류가 발생했다.
python3.6 code:
import subprocess def linux_cmd(cmd, s): s = s.strip() p = subprocess.Popen([cmd, s], stdout=subprocess.PIPE) r = p.communicate() return r[0] if __name__=='__main__': k = linux_cmd('cat', 'a.txt') print(k)
오류:
Traceback (most recent call last): File "test.py", line 13, in <module> k = whois_search('google.com') File "test.py", line 7, in whois_search r = str(proc.read().decode('ascii')) File "/home/boxcorea/whois_project/lib/python3.6/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 5160: ordinal not in range(128)
원인은 실행결과가 utf-8일때, 결과를 return할때, ascii 코드로 변환되지 않는 문자가 포함되면 발생했다.(잘 되는 경우도 있음)
결과를 강제로 ASCII로 반환하도록 코드 수정
return r[0].decode('ascii')
그러나 같은 오류 발생.
변환시 오류를 무시하도록 아래와 같이 변경
return r[0].decode('ascii', 'ignore')
이제 이상 없이 잘 동작한다.
1 comment
Author
utf-8을 ASCII로 디코딩 할때, 유실되는 문자가 많을 수도 있음.
완벽한 해결책이 아님을 확인함.