[python] \b(백스페이스) 문자 제거하기
·
언어/python
파이썬에서 \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) 위 코드는 '\..
[python] flask-socketio에서 버퍼링 없이 데이터 보내기
·
언어/python
서버에서 프로그램을 실행시켜 실행되는 프로그램이 출력하는 문장을 클라이언트에게 전송하는 기능을 구현중이었다. 클라이언트와 연결되면 특정 프로그램을 실행시키고 해당 프로그램이 출력문을 뱉을 때 마다 send()함수를 이용하여 클라이언트로 출력문을 송신하도록 했다. 즉, 한 이벤트 핸들러 안에서 반복문을 이용하여 매 반복마다 데이터를 송신하도록 했다. @socketio.on('connect') def connect_event(): p = redirect_test.run_file('./root/redirect.py') while p.poll() == None: out = p.stdout.readline() socketio.send({"data":out},json=True) 그러나 매 루프마다 데이터가 보내지지..
[python] 줄바꿈을 기준으로 문자열 분리하기
·
언어/python
파이썬에서 split() 함수를 이용하여 줄바꿈을 할 수 있지만 splitlines() 함수를 이용하여 문자열을 분리하는 방법에 대해 알아보았다. 함수 원형 str.splitlines(keepends=False) keepends(bool) True값이 주어지면 리스트에 줄바꿈 기호를 포함한다. 설명 split()과 마찬가지로 문자열을 구분자를 기준으로 분리해 리스트를 반환한다. 이때 splitlines() 함수는 이 구분자를 universal newlines로 사용한다. universal newlines는 파이썬에서 줄바꿈으로 인식하는 문자로 아래와 같다. 표현 설명 \n 줄바꿈 \r 캐리지 리턴 \r\n 캐리지 리턴 + 줄바꿈 \v 또는 \x0b 수직 탭 \f 또는 \x0c 폼 피드 \x1c 파일 구분..
[python] OSError: [Errno 98] Address already in use
·
언어/python
socket은 소켓을 닫은 후 바로 재사용할 수 없도록 TIME_WAIT라는 상태를 가진다. setsockopt 함수를 사용하여 socket의 옵션을 변경할 수 있는데 SO_REUSEADDR 옵션을 1로 변경하면 기존 TIME_WAIT 상태를 버리고 새로운 소켓 요청을 할당할 수 있다. sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 이제 1초에 1번씩 소켓을 재사용해도 에러가 발생되지 않는다.