IT/python 51

[python3][pyaudio] 초기화 디버그 메시지 숨기기

pyaudio 를 쓰면서 좀 짜증아 났던 부분이 강제적인 디버그 메시지를 봐야 한다는 것입니다. 구현한 프로그램이 시스템의 서비스로 등록되면 해당 메시지가 syslog 를 당당하게 차지하기도 합니다. 보통은 /usr/share/alsa/alsa.conf 파일이나 ~/.asoundrc 파일이나 /etc/asound.conf 설정이 문제가 있어서 발생하는 메시지라고 합니다. 가장 좋은 것은 최적화된 설정을 찾아서 고치는 것이겠죠.. 고치지 않아도 동작 잘 되고, 위의 alsa 설정 고치기도 머리 아프고, 지저분한 것이 싫은 경우에는 에러 핸들러를 비워주면 해당 메시지 없이 사용할 수 있습니다. #!/usr/bin/env python from ctypes import * import pyaudio # c 언어..

IT/python 2023.10.18

[python3] 터미널에서 한 줄로 if else 사용하기

가끔 터미널에서 작업을 할 때 bash 로 작성하기에는 짜증나고 python 으로 하면 금방 처리되는 경우가 있습니다. 파이썬 명령이 길어지는 경우 파일로 작성해서 터미널에서 실행하면 가장 간단한데, 가끔 파일 자체를 작성할 수 없는 경우가 있습니다. 이런 경우 터미널에서 python -c '파이썬 명령들' 로 실행을 할 수 있는데 단순 한줄짜리 명령들은 세미콜론 ; 을 사용해서 여러 명령을 입력할 수 있었는데 if else 등은 할 줄 몰라서 못했었습니다. 그냥 대충 써보면 개행이 잘못되었다든지 문법이 틀렸다든지의 오류가 발생했었습니다. 인터넷을 뒤져 찾아낸 방법은 python -c $"파이썬 명령1\n파이썬 명령2\n..." 형태로 쓰면 정상적으로 실행되는 것을 확인할 수 있었습니다. 예를 들면 if..

IT/python 2023.10.06

[python3] asyncssh + nohup command

원격으로 작업을 할 일이 생겼습니다. 시간이 좀 걸리는 파이썬 패키지 설치 작업이었습니다. 이를 여러 장비에다 설치하려고 하는데 기존 코드는 장비 하나하나 일일이 접속해서 패키지도 하나하나 다 설치 완료 해야 다음 항목으로 넘어갈 수 있었습니다. 각 장비에서 소요되는 시간은 3분이 채 안되는데 전체 장비가 400여대 가까이 되니 1200분... 즉 20시간이 소요되는 겁니다... 이를 줄여보고자 며칠 째 집에도 제 때 못들어가고 작업하다가 대충 동작하는 코드를 완성해서 그 일부를 공유합니다. connect 인자는 대충 아실겁니다. known_hosts=None 은 등록되지 않은 장비에 접속할 때 known_hosts 에 등록할 것인지 물어보게 되는데 (ssh 명령으로는 -o StrictHostKeyChe..

IT/python 2023.09.22

[python] 문자열 뒤집기

기록용으로 남깁니다. 쉬운 내용인데 가끔 가물가물해서 정리합니다. 문자열이 s = "God is my judge" 일 때 s[::-1] 로 뒤집힌 값을 얻을 수 있습니다. 참고로 이 슬라이스 인덱싱은 [시작위치:끝위치:step/stride/보폭] 으로 지정할 수 있습니다. 끝위치 전까지로 끝위치 문자는 포함되지 않습니다. s 는 s[0::1] 과 같습니다. 다른 방법(for 를 사용한 c 방법, 리스트로 변환하는 방법)들이 있지만 이 방법만 기억하셔도 좋을 것 같습니다. 깔끔하니까요!!

IT/python 2023.06.19

[python][colab] 구글 드라이브 로그인하고 파일 접근하기

기록용으로 남깁니다. 구글 코랩에서 ipynb 파일 같은 것을 열었을 때 구글 드라이브에 있는 데이터 파일에 접근할 수 있습니다. from google.colab import drive import pandas as pd drive.mount("/content/drive") df = pd.read_csv("/content/drive/MyDrive/abcd.csv") 먼저 google.colab 의 drive 를 import 합니다. 코랩 안에서는 당연히 별도의 설치 없이 사용할 수 있습니다. 그 외의 환경에서는 멍개님의 글 과 같이 복잡한 방법이 필요합니다. drive.mount("/content/drive") 명령으로 마운트 명령을 내리면 구글 계정 연동 페이지 뜨면서 권한 묻고 할 겁니다. 내가 쓰려..

IT/python 2023.05.31

[python3] 파이썬 프로세스 중복 실행 여부 확인

def check_duplicate_execution(exact_python_file_name, pid): for p in psutil.process_iter(): cmd = p.cmdline() if cmd and exact_python_file_name in cmd and p.pid != pid: return True return False 파라미터는 비교할 파이썬 파일 이름인데 여기에서는 이것을 실행한 내 프로세스의 파일 이름을 전달합니다. psutil.process_iter() 로 psutil.Process객체를 하나씩 가져와서 cmdline() 으로 얻어온 명령 줄에 해당 이름이 존재하는지 확인가능합니다. cmdline() 은 리스트로 되어 있습니다. 보통은 파이썬 스크립트 이름은 cmdline..

IT/python 2023.05.24

[python3] 동일 값으로만 채워진 객체 확인하기

동일한 값으로만 iterable 한 객체가 가득 채워진 경우를 확인할 필요가 있습니다. 예를 들면 C 언어로 초기화된 리눅스 공유메모리는 C 의 null 값인 0x00 으로 초기화 됩니다. 제가 사용하고 있는 프로그램은 4096 Byte의 공유메모리를 초기화 해서 사용하고 있었습니다. 공유 메모리 내용 검증을 하기 위해 특정 상황에 메모리 내용을 찍도록 해놓았는데, 초기화이 쓸데없이 0x00 이 4096개나 스크롤되는게 좀 짜증이 났습니다. 방법을 찾던 중 all 이라는 파이썬 내장(built-in)함수를 알게 되었습니다. all(iterable) 과 같이 호출하고 iterable 값 중에 하나라도 비어 있는 값이 있으면 False 를 반환하고 모두 비어있지 않으면 True 를 반환합니다. 비슷한 함수로..

IT/python 2023.02.17

[python3] pathlib 으로 encoding 지정해서 파일 읽기

기록용으로 남깁니다. 엑셀에서 csv 로 변환한 파일을 읽으려고 하니 오류가 생겼습니다. SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape encoding 을 지정하니 정상 동작합니다. f = open("kk.csv", "r", encoding="utf-8") 그냥 open 말고 pathlib 을 사용해서도 읽고 싶었습니다. data = Path("kk.csv").read_text(encoding="utf-8") 디저트로 윈도우 파일 경로를 그대로 붙여넣었더니 오류가 발생해서 간단히 해결했습니다. "d:\doc\kk.csv" 로 쓰면 \가 escape..

IT/python 2023.02.16