본문 바로가기

Python47

Python에서 사용자 입력 받는 방법: input() Python에서 사용자 입력 값을 받는 input() 함수를 설명합니다. input() 함수는 string으로 입력을 받습니다. Python built-in함수로 별도 모듈의 import는 필요 없으며, 사용법 또한 매우 간단합니다. input()을 string으로 return 하기 때문에 separator를 사용해서 입력을 받는 경우 split() 함수를 활용하면 여러 개의 input을 받을 수 있습니다. > res = input() → 사용자 입력을 받아서 string으로 저장합니다. Sample code는 아래와 같습니다. def main_menu(): print ("------------------------------------------") print ("Select menu") print (.. 2020. 8. 31.
MobaXterm (Cygwin)에서 Python 및 PIP 설치 MobaXterm에서 Python을 설치하고 실행하는 방법을 설명합니다. MobaXterm은 내부적으로 Cygwin으로 동작하기 때문에 Cygiwin에서 Python을 설치하는 방법과 동일하며, MobaXterm 나름의 Package update 기능을 지원하고 있기 때문에 MobaXterm 구동 상태에서 패키지 업데이트가 가능합니다. MobaXterm 실행 상태에서 상단 메뉴의 ① Packages 메뉴를 선택합니다. 해당 메뉴를 선택하면 cygwin의 설치 정보를 업데이트하고 패키지를 선택하는 옵션을 보여줍니다. MobaXterm의 package update 메뉴에서 ② show lib/devel 옵션을 활성화하고, ③ 패키지 검색창에서 'python3-dev'를 입력합니다. 설치하고자 하는 packa.. 2020. 8. 31.
Android에서 Python 실행 (SL4A와 Termux 활용) Python은 Google Android OS에서 공식적으로 지원하고 언어가 아닙니다. 하지만 Open source의 SL4A라는 Project, Kivy Project와 함께 Termux와 같은 Linux Emulator를 통해서 Python을 설치하고 실행할 수 있습니다. SL4A를 Android Playstore에서 검색하면 QPython 3L, Pydroid3와 같은 App을 다운로드할 수 있습니다. 본 포스팅은 SL4A는 유튜브 동영상으로 설명을 대신하고 Termux에서 Python 사용하는 사례를 설명하고자 합니다. SL4A 기반의 app과 Termux에서 Python을 실행하는 경우에 대한 비교는 아래와 같이 정리할 수 있습니다. SL4A 기반의 Python (e.g. QPython 3L) .. 2020. 8. 29.
Python Error: #!/usr/bin/env python3: 그런 파일이나 디렉터리가 없습니다 (No such file or directory) Python code를 작성하다 보면 #!/usr/bin/env python3 구문에서 에러가 발생하는 경우가 있습니다. 예를 들어 윈도에서 작성한 파이썬 파일을 리눅스에서 수정 및 실행을 하다 보면 에러가 발생할 수 있습니다. 이전 포스팅 (https://kibua20.tistory.com/73)에서는 윈도우와 리눅스에서 줄 바꿈 문자가 문제가 되는 경우도 있고, 아래와 같이 윈도우와 리눅스의 UFT8 인코딩 방식에 의해서 에러가 발생하는 경우도 있습니다. Python code: Code에는 문제가 없다. #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os print ('test') 에러 메시지 #!/usr/bin/env python3: 그런 파일이나 디.. 2020. 8. 19.
파이썬 Selenium을 활용한 블서치 백링크 등록 '자동화' 티스토리 블로그를 운영하시는 분은 백링크의 중요성을 인지하고 계실 것 같습니다. 구글이나 네이버 검색 엔진에서 블로그의 백링크 수가 높은 경우 좋은 글로 판단해서 노출도를 높인다고 합니다. 백링크 사이트에 블로그 글을 등록하는 것이 검색엔진에 '노출도 향상'이 얼마나 실효성이 있을지 알 수는 없으니 최소한 손해 보는 일이 없을 것 같습니다 본인 판단 하에 등록 여부를 결정하시기 바랍니다. 구글 서치 콘솔이나 네이버 서치 어드바이저에서는 아래와 같은 백링크 정보에 대한 통계치를 제공하고 있습니다. 본 포스팅의 실행 결과는 아래 동영상을 참조해주세요. 블서치 백링크 자동 등록1. 블서치 백링크 등록 방법백링크를 등록하는 사이트는 키자드와 블서치가 있습니다. 키자드는 블로그 글의 시작 번호와 끝 번호만 넣으면.. 2020. 8. 5.
Python: OSError: [Errno 98] Address already in use (Flask) Python으로 Web framework인 Flask를 공부하다가 발생하나 에러입니다. Flask에서 5000 포트를 사용하고 있는데 Flask 모듈이 비정상적으로 종료해서 5000 포트를 잡고 있어 발생하는 에러입니다. 에러 메시지 Traceback (most recent call last): File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_mainreturn _run_code(code, main_globals, None, File "/usr/lib/python3.8/runpy.py", line 86, in _run_codeexec(code, run_globals) (중략) File "/usr/local/lib/python3.8/dist.. 2020. 7. 26.
Python: 폴더 백업 기능 구현 (7zip 압축, Sample code) 특정 폴더(working_folder)를 일정 시간 간격으로 백업을 해야 기능이 필요해서 python으로 구현한 내용을 공유합니다. 특정 폴더의 백업 기능의 상세 구현 사항은 아래와 같습니다. Working folder의 하위에 모든 파일을 backup 한다. (주기적으로 실행은 crontab 사용) 하드 디스크를 용량을 절약하기 위해서 7zip 파일로 압축한다. (압축 포맷은 효율이 좋은 7 zip 사용) 백업 폴더에서 백업 파일 7zip 파일의 개수는 미리 설정한 최대 개수를 초과하지 않는다. 백업 파일의 최대 개수가 초과하는 경우 오래된 파일부터 삭제한다. 7zip 파일은 비밀 번호 설정한다. 아래 코드는 우분투를 환경에서 동작하는 검증한 code이고, os.system()를 수정하면 windows.. 2020. 7. 9.
Python 에러: /usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 없습니다 Python code를 *.py 파일에 작성하고 terminal에서 실행하는 방법은 python 명령어 뒤에 py 파일을 인자로 전달하거나, 일반 실행 파일처럼./test.py로 직접 실행할 수 있다. test.py 파일을 바로 실행하기 위해서는 interpreter 지정 ( #!/usr/bin/env python3)있어야 하고, 실행 권한이(chmod 766) 있어야 한다. #python으로 test.py을 실행하는 방법 $ python3 test.py $ ./test.py test.py 파일 #!/usr/bin/env python3 # -*- coding:utf-8 -*- 에러 메시지 터미널에서 test.py 을 실행했을 때 "/usr/bin/env: `python3\r': 그런 파일이나 디렉터리가 .. 2020. 7. 3.
Python 소스 숨기는 방법: pyc 활용 (Bytecode로 컴파일) Python은 기본적으로 인터프리터 언어이기 때문에 별도의 컴파일과 링크 없이 실행(=해석) 가능합니다. 상용 프로그램으로 배포하는 경우나 보안 상 파이썬 소스 코드의 일부분을 숨겨야 하는 경우 Byte code로 변환하여 pyc (pyo) 파일을 사용할 수 있습니다. pyc 파일은 C 언어처럼 기계어로 컴파일한 것이 아니라 Byte code로 '변환'한 것이기 때문에 조금만 노력하면 원래의 소스 코드로 de-compile이 가능하기 때문에 절대적으로 소스 코드의 보안이 유지된다고 믿어서는 안 됩니다. 다만 소스코드를 보기 힘들게 하는 정도로 이해해야 합니다. Python 공식 문서에는 pyc로 컴파일하는 py_compile()는 아래와 같이 설명되어 있습니다. https://docs.python.org.. 2020. 6. 30.
Python 표준 입출력(stdin/stdout) 활용 - 리눅스 프로그램과 연동 작업 동기 Command line으로 email 전송 프로그램이 필요해서 Gmail API와 Python를 사용해서 sendmail() 함수를 구현하였다. Python으로 구현한 sendmail() 함수의 1차 구현은 아래와 같이 sender, to, subject, attachment, message를 파라미터를 받는 함수로 구현하였다. 앞에 4개 인자(sender, to, subject, attachment)는 까지는 함수 호출을 한 줄로 끝낼 수 있지만, mesaage (=email 내용)은 경우에 따라서 매우 길어져서 다른 방법을 찾아야 했다. 기존에 Postfix와 sendmail과 mail의 호출 예를 보니, bash의 | 와 2020. 6. 29.
Google Gmail API 사용 방법 (1) - Sample code Google에서 제공하는 Gmail REST API를 사용하는 방법에 대해서 설명하고자 한다. Google에서는 GMAIL 뿐 아니라 YouTube, Cloud, Analytics 등 거의 모든 서비스에 대해서 REST API(이하 API)를 지원한다. 참고고, 커멘드 라인으로 Gmail을 전송하는 방법은 아래 게시글에 설명되어 있다. 아래 2가지 모두 stmp 서버의 계정 정보가 노출되어야 한다. 우분투에서 gmail 활용하여 command line으로 email 전송 Python smtplib 사용한 email 발송 예제 (gmail) 본 게시글은 구글 API를 사용하기 위해서는 Web Server application 기준으로 3개의 게시글로 나눠서 설명할 예정이다. 1단계는 Google API C.. 2020. 6. 29.
Python JSON 사용 시 TypeError: Object of type bytes is not JSON serializable Python 3.8 버전에서 Dictionary 데이터를 JSON변환 시 발생했던 TypeError: Object of type bytes is not JSON serializable 에러에 대한 수정 사항입니다. json.dumps()함수는 일반 obj를 JSON 포맷의 string으로 serialize 한다고 설명되어 있다(아래 그림) . 즉, Dictionary를 JSON으로 변환하기 위해서는 일반적으로 string으로 직렬화하여 전달해야 하지만, 직렬화가 정의되지 않은 byte array 로 전달하여 Type error 에러가 발생하는 것입니다. decode('utf8') 함수를 사용해서 byte array를 string으로 변환하여 수정할 수 있습니다. 수정 전 코드 def CreateMessa.. 2020. 6. 29.
Python smtplib 사용한 email 발송 예제 (gmail) 이전 Post에서는 우분투에 postfix를 설치하고 gmail을 전송을 하는 방법을 확인하였습니다. 본 글은 python 에 기본 내장되어 있는smtplib를 사용하는 방법에 대해서 정리하였습니다. smtplib를 사용하면 간단하게 email 전송이 가능하나, python script 상에서 계정과 Password 가 노출된다는 문제점이 있습니다. 참고로, 아이디와 패스워드가 노출 없이 진행하기 위해서는 Google Gmail API를 사용할 수 있으며, 이는 access token으로 인증을 받아서 1 시간만 유효하기 때문에 보안 관점에서 유리합니다. [개발환경] - [Memo] 우분투에서 gmail활용하여 command line으로 email 전송 [모바일/REST API] - Google Gmai.. 2020. 6. 28.
Python SyntaxError: Non-ASCII character in file on, but no encoding declared Python 에서 코딩을 잘하고 있다가 한글을 사용하는 경우 "SyntaxError: Non-ASCII character, but no encoding declared" 가 발생한다. 이 경우 py 파일의 최상단에 encoding type을 선언해주면 해결된다. 수정 전: def CreateMessage(sender, to, subject, message_text): message = MIMEText(message_text) message['to'] = to message['from'] = sender message['subject'] = subject try: return {'raw': base64.urlsafe_b64encode(message.as_string())} except: return {'r.. 2020. 6. 28.
[Tips] Python: XML Parsing 시 multiple elements on top level 1. XML 처리 시 "multiple elements on top level" 에러 XML 에서 well-formed 텍스트 아래와 같이 정의할 수 있다. 아래 5) 번째 조건 "루트" Element는 모든 elment를 포함한다" 조건이 맞지 않아서 Parse Error가 발생한 것이다. Python 2.x 버전의 ElementTree에서는 Exceptin없이 처리하나, Python 3.8 버전에서는 Exeption을 발생시킨다. 1) 문서는 적절히 인코딩된 올바른(legal) 유니코드 문자만을 포함한다. 2) 2020. 6. 8.
[Tips] XML 에서 예약/특수 문자 처리 1. XLM 예약 문자 - "Parser Error : not well-formed" 요즘 Python 사용해서 XML 을 처리하다가 닭질(?) 내용을 정리합니다. ElementTree 로 XML 파일을 문제 없이 잘 사용하고 있다가 파이썬 코드는 변경이 없음에도 불구하고 갑자기 XML Parser에서 "Parser Error : not well-formed" 이 발생하는 경우가 있다. 에러 발생 원인은 XML 파일에 예약 문제가 포함되어 있기 때문으로 아래와 같이 문자열 변환 과정을 거쳐야 한다. #Xml 로딩하는 코드 import xml.etree.ElementTree as ET from xml.etree.ElementTree import ElementTree, Element, SubElement, .. 2020. 5. 31.
Ubuntu 에서 SW 개발 Tool 설치 Ubuntu 20.04 버전 설치 후 개발에 필요한 package 를 설치하고자 한다. 아래 command 를 사용해서 한방에 설치할 수 있다. 하고자 하는 것 개발용 컴파일러, Editor, tool 를 설치 vim, git, gcc, python, Visual code, Android studio, Notepad++, diff merge tool #repository update $ sudo add-apt-repository ppa:maarten-fonville/android-studio $ sudo sh -c 'curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft... 2020. 5. 15.