파이썬에서 \b 문자를 제거해야되는 상황을 만났다.
file_name = './root/redirect.py'
cmd_reculsive = [sys.executable, '-u', file_name, '-r']
p = subprocess.Popen(cmd_reculsive,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=False)
while p.poll() == None:
out = p.stdout.readline().decode('utf-8').replace('\x08','')
print(out, end='')
socketio.send({"data":out},json=True)
socketio.sleep(0)
위 코드는 '\b'문자를 제거해야되는 코드로 '\b' 문자를 출력하는 파일을 subprocess의 Popen() 함수로 실행시킨 후 출력되는 내용을 websocket을 통해 상대방에게 보내는 코드이다.
out = p.stdout.readline().decode('utf-8').replace('\x08','')
위 코드는 전체 코드 중 '\b' 문자를 제거하는 코드이다.
Popen 함수에서 universal_newlines를 False로 주게되면 출력값이 bytes 형태로 나오게 된다. 따라서 utf-8로 decode하여 str형태로 만든 후 replace()함수를 사용하여 '\x08' 문자를 찾아 모두 ''로 변경하도록 했다.('\b' 문자는 백스페이스를 의미하며 이는 아스키 코드값으로 '\x08'이다.)
newString = string.replace('\x08','')
이미 str 형태의 문자열에서 '\b'문자를 제거하려면 위 코드를 사용하면 된다.
'\b' 제거하는 방법과 마찬가지로 다른 제어문자를 제거하려면 '\x08' 자리에 제거하려는 제어문자의 아스키 코드값을 넣으면 된다.
'언어 > python' 카테고리의 다른 글
[python] flask-socketio에서 버퍼링 없이 데이터 보내기 (2) | 2023.01.20 |
---|---|
[python] 줄바꿈을 기준으로 문자열 분리하기 (0) | 2023.01.14 |
[python] OSError: [Errno 98] Address already in use (0) | 2023.01.13 |