본문으로 바로가기

[python] \b(백스페이스) 문자 제거하기

category 언어/python 2023. 2. 1. 03:07

파이썬에서 \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' 자리에 제거하려는 제어문자의 아스키 코드값을 넣으면 된다.