이번 시간에는 실행 중인 파이썬 프로그램에서 디버거를 호출하는 방법을 알아보겠습니다. pdb는 python debugger입니다. foo 함수 안에, import pdb와 pdb.set_trace()를 입력해 보겠습니다. 사실 저 두 줄이면 됩니다. 다음에, python main.py를 입력해서, main.py를 실행시켜 보겠습니다. 그러면, foo() 함수 안의 5번째 줄의 print(x)에 멈춰있음을 확인할 수 있습니다. 이 지점에서 호출했기 때문에, 디버거가 해당 지점으로 진입하게 됩니다. 그리고 pdb shell이 하나 나오게 됩니다. 이제 help를 입력해 봅시다. 여러 가지 명령어들이 있습니다. 저는 이 중에, 현재 위치의 stack trace를 보고 싶습니다. 이 때에는 where를 입력하면..
코딩/파이선 검색 결과
파이썬에서 현재 프로세스의 pid와 쓰레드의 id 값을 어떻게 얻어올까요? 이 방법을 알아보겠습니다. 명령어는 window에 설치된 WSL-2, ubuntu 22.04 버전에서 실행하였습니다. 먼저, os.getpid()로 현재 프로세스의 pid (process id)를 얻어올 수 있습니다. 실행해 보겠습니다. python3 test.py를 실행시켜 보니, 130이라는 값이 출력됩니다. pstree가 깔려 있다면, pstree -p로 부모 프로세스와 자식 프로세스들을 한눈에 볼 수 있습니다. python3(130)이라고 되어 있습니다. 이는 python3 프로세스의 pid가 130이라는 것을 의미합니다. ps -aux 명령어를 입력해 보겠습니다. python3 ~ COMMAND를 입력해서 실행시킨 프로세..
안녕하세요. 이번 시간에는 프로그램에 필수 인자와 선택 인자 옵션을 주기 위해 쓰는 argparse에 대해서 알아보고자 해요. 상당히 방대하지만, 필요하다 싶은 것만 빠르게 추려보도록 할게요. 먼저 예제 1번입니다. argparse.ArgumentParser()로 파서를 하나 생성합니다. 다음에, add_argument로 argument 2개를 생성할 거에요. a와 b입니다. 이 둘은 필수 인자들이 되겠습니다. 다음에, 6번째 줄에 parser.parse_args()로 들어온 인자들에 대한 정보들을 리턴하는데요. 이를 vars로 딕셔너리로 변환합니다. 7번째 줄에, 인자 "a"와 "b"에 들어온 수를 합해서, 결과를 출력해요. python main.py를 입력해 봅시다. 그러면, a와 b가 필요한데 없어..
pickle을 loads할 때 신뢰할 수 없는 데이터는 절대로 언피클하지 말라고 되어 있습니다. 왜 그럴까요? 문서의 이 부분에서도 잠깐 언급되는 부분이지만, os.system과 같은 함수들을 수행되게 할 수 있기 때문입니다. 문서에 나온 코드를 조금 응용해서 실습해 보겠습니다. 먼저, b"cos\nsystem\n(S'rm -r *.txt'\ntR."이 pickle.loads의 인자로 들어왔습니다. 해당 python 파일을 실행시켜 보겠습니다. 실행 전과 후를 비교해 보면, txt 파일이 죄다 사라졌음을 볼 수 있습니다. 이것만 봐도 그냥 깡으로 필터링 없이 처리하면 얼마나 위험한지 알 수 있습니다. pickletools의 dis를 이용하면, 해당 byte가 어떻게 해석되는지를 보여줍니다. 요렇게 해석이..
민감한 변수가 있을 때에는 어떻게 해야 할까요? 예를 들어, AWS_SECRET_KEY 같은 것들입니다. 이들을 프로그램의 환경 변수로 불러와서 코드 내에서 노출을 숨기는 방법이 있는데요. python-dotenv를 사용하는 방법을 소개해 드리겠습니다. django라던지 flask는 비슷한 기능을 하는 패키지가 있으니 찾아보시는 것도 도움이 되실 듯 합니다. 먼저, python-dotenv를 설치하겠습니다. dotenv 내부에는 여러 함수들이 있는데요. 이 중, load_dotenv를 보겠습니다. 설명을 보면, Parse a .env file이라고 되어 있어요. .env 파일을 찾은 다음에, 해당 파일 안에 있는 변수들을 environment 변수에 넣습니다. 즉, dotenv.load_dotenv()를..
최근댓글