도전 진행 중

인공지능 모델 개발과 서비스 제공을 위한 플랫폼 개발을 같이 해보면서,

개인적으로 서비스 플랫폼 개발하는 것에 더 흥미를 느꼈다.

 

처음 입사해서 만든 플랫폼 코드를 틈틈히 뜯어 고치다가 최근에 2달여에 걸쳐서 통신 방식들을 뜯어 고치면서 웹서비스를 만들어 보고 싶은 생각이 들어 클론 코딩 강의를 따라 들어보고있다.

 

일단 새로운 것을 하니 즐겁다!

 

목표는 트위터 클론코딩 강의를 마치고, 해당 강의를 통해 배운 ReactJS를 활용해서 일종의 개발자 SNS 페이지를 만들어보고 싶다. Python으로 간단한 백엔드 구성은 해보았으니, 좀 더 웹 서비스 다운 백엔드를 만들기 위해 공부하다보면 잘 되지 않을까?

 

2023년 완성을 목표로 시작해본다.

'기타 잡설' 카테고리의 다른 글

2020년 08월 06일 블로그 시작  (0) 2020.08.06
Posted by EnergyCastle
,

Python에서 ffmpeg 를 사용할 때에는 여러 주의점이 있습니다.

본 글은 windows 환경에서의 ffmpeg 사용 tip입니다.

 

1. Python Code 실행 경로에 반드시 ffmpeg 파일 존재.

pip install ffmpeg

 위 명령어를 이용해 ffmpeg를 설치하고 Python Code를 실행하셔도 ffmpeg가 존재하지 않는 다는 식의 에러가 발생 할 것입니다. 이와 같은 문제를 해결하기 위해서는 현재 실행할 .py파일과 같은 경로상에 ffmpeg.exe 파일이 존재하여야 합니다.

 

2. Log level 조정.

ffmpeg -loglevel "error" -i (input) ...

    "quiet"
    "panic"
    "fatal"
    "error"
    "warning"
    "info"
    "verbose"
    "debug"

loglevel을 통해 ffmpeg 실행 중에 표시되는 로그의 자세한 정도를 조절 할 수 있습니다.

 

3. Command 창 실행 안되게 하기.

Python Code 상에서 ffmpeg를 사용하는 것은 나의 코드가 ffmpeg 프로그램을 실행시켜서 처리하는 작업입니다.

그렇기 때문에, 실행환경에 따라서 Command창이 자동으로 생성될 수 있습니다.

 특히, pyinstaller 등을 통해서 GUI가 포함된 exe파일을 생성하였는데, 불필요한 Command 창이 실행된다면 매우 난감한 상황이 벌어지게 됩니다.

 

ffmpeg -hide_banner

위 옵션을 통해 해결된다면 좋겠지만, 그렇지 않다면

pip 를 통해 설치한 ffmpeg 패키지 코드를 수정해야 합니다.

ffmpeg package 폴더로 이동 (eg, python_path/site_pakages/ffmpeg)

"_run.py" 열기

"def run_async" 찾기

run_async 함수의 return 부분에 creationflags 옵션 추가

return subprocess.Popen(
        args, stdin=stdin_stram, stout=stout_stream, stderr=stdderr_stream, creationflags=0x08000000
    )

위와 같은 작업을 통해서 command 창 생성을 막을수 있습니다.

'Python' 카테고리의 다른 글

Python 파일 실행 옵션 만들기  (0) 2020.08.18
Python FTP 활용하기  (0) 2020.08.08
Posted by EnergyCastle
,

01. 간단 예제

 

Python 코드를 작성하고, 실행할 때 각종 변수에 해당하는 값들을 바꿔가며 실행해야 될 경우가 있습니다.

 

혹은 외부 프로그램이 내 파이썬 코드를 실행한다고 하면, 상황에 맞게 마치 함수처럼 내 코드 전체를 실행하고 싶을 수 있습니다.

 

Python 에서는 이러한 상황에서  argparse를 이용해서 간편하게 실행할 때 입력해 줄 수 있는 옵션을 지정 할 수 있습니다.

argparse 예제 - 1

 

위와 같이 argparse를 통해 파이썬 실행시 입력되는 문자열을 파싱하여 그 값을 읽어오고 코드 내부에서 사용할 수 있습니다.

 

argparse 예제 - 1 실행결과

argparse를 이용하면 이렇게 쉽게 실행 옵션을 삽입 할 수 있습니다.

특히, 프로그램을 실행하는 과정에서 주고받는 데이터가 저장되는 경로나 출력이 저장될 경로는 수시로 바뀔 수 있기 때문에 옵션으로 처리해두면 추후에 변경사항에 대해서 유연하게 대처하기 쉬워집니다.

이 외에도, 중요 함수들의 입력값을 미리 옵션으로 처리해두면 코드를 변경하지 않고, 함수에 입력 값들을 변경하면서 사용 가능합니다.

 

02. 옵션으로  list 처리하기

'str', 'int', 'float' 등의 자료형 이외에 리스트를 입력으로 넣고 싶은 경우가 많습니다.

하지만 type에 list를 입력하고, 실제 실행할 때 리스트 형태의 입력을 던져주면 에러가 발생합니다.

argparse 예제 - 2
default 값에선 인식하는데 실제 옵션으로 사용하면 error 발생!?

 

list 를 입력으로 받기 위해서는 추가로 nargs='+'라는 옵션이 필요합니다.

 

argparse 예제 - 2 수정
옵션으로 list 사용하기

 

type을 그대로 list로 두고 nargs='+'를 넣으면, 연속된 숫자를 하나의 행으로 하는 리스트 타입이 만들어 지기도 합니다.

 

type=list, nargs='+'
띄어쓰기를 통해 행을 구분

 

알아두시고 상황에 따라 적절하게 사용하시면 좋을 것 같습니다.

 

마지막으로 list를 사용하는 부분에 관련하여 참고한 링크를 첨부합니다.

https://stackoverflow.com/questions/15753701/how-can-i-pass-a-list-as-a-command-line-argument-with-argparse

 

How can I pass a list as a command-line argument with argparse?

I am trying to pass a list as an argument to a command line program. Is there an argparse option to pass a list as option? parser.add_argument('-l', '--list', type=list, acti...

stackoverflow.com

 

감사합니다.

'Python' 카테고리의 다른 글

[Python] ffmpeg 커맨드창 실행 안되게 하는 방법  (0) 2020.10.26
Python FTP 활용하기  (0) 2020.08.08
Posted by EnergyCastle
,

Python FTP 활용하기

Python 2020. 8. 8. 09:27

Python에서는 간단한 방법으로 FTP에 접속해서 데이터를 다운로드 받고 혹은 업로드 할 수 있습니다.

 

바로,

ftplib 라는 라이브러리를 활용하는 방법 입니다.

 

ftplib 사용법

import ftplib

ftp = ftplib.FTP()
ftp.connect(host='ftp ip address', port=21)
ftp.login(user='user_id', passwd='user_pw')


# Download 받을 파일을 wb(write binary) mode 로 열어줍니다.
download_file = open('file.dat', 'wb')


# RETR은 FTP 명령어로 다운로드 받기 위한 명령어입니다.
ftp.retrbinary('RETR /file_path', download_file)


# Download가 완료되면 파일을 닫습니다.
download_file.close()


# Upload 받을 파일을 rb(read binary) mode 로 열어줍니다.
upload_file = open('file.dat', 'rb')


# STOR은 FTP 명령어로 업로드 하기 위한 명령어입니다.
ftp.storbinary('STOR /file_path', upload_file)


# Upload가 완료되면 파일을 닫습니다.
upload_file.close()

위와 같이 간단하게 FTP에 접속하여 파일을 다운로드 받거나 업로드 하는 기능을 구현할 수 있습니다!

 

 

FTP login 상황에서 id와 pw가 정확하지만 로그인이 안된다면,

FTP 서버 측에서 설정을 확인해 보시기 바랍니다.

 

ftp.retrbinary 혹은 ftp.storbinary가 550 fail error가 발생할 경우 FTP에 접속하는 계정이 경로를 접근하는데 문제가 있을 수 있습니다. FTP 서버에서 경로 접근 권한에 대한 부분을 확인해 주세요.

 

Python에서 FTP로 접속하고, 파일 다운로드 및 업로드하는 기능을 구현하는 건 매우 쉽습니다.

다소 어려운 문제는 사실 FTP 서버를 구축하는 일이라고 생각됩니다.

 

https://energycastle.tistory.com/4

 

Linux(Ubuntu) FTP server 구축하기

Ubuntu 18.04 버전을 중심으로 작성한 문서입니다. 처음으로 FTP 서버를 구축해보면서 몇가지 시행착오를 겪으며 최종 정리를 하겠습니다. 우선 vsftpd를 이용하면 간단하게 FTP 환경을 구성하고 설정

energycastle.tistory.com

Ubuntu에서 FTP 서버를 구축하는 법에 대해서는 제가 간단하게 정리해놓은 글이 있습니다.

해당 글을 보면서 차근차근 해보시면 어렵지 않게 FTP 서버를 만들고 Python으로 파일을 주고 받을 수 있을 것 입니다.

'Python' 카테고리의 다른 글

[Python] ffmpeg 커맨드창 실행 안되게 하는 방법  (0) 2020.10.26
Python 파일 실행 옵션 만들기  (0) 2020.08.18
Posted by EnergyCastle
,

간단한 쉘 스크립트를 작성하면서 처음 접한 가장 큰 문제였습니다.

 

쉘 스크립트를 실행하면 그 안에서 python 프로그램을 실행시키도록 만들었는데,

어째서인지 argparse를 이용해 만들어둔 옵션들을 쉘 스크립트가 실행할 때 똑바로 인식하지 못하는 것입니다.

 

몇시간동안 대체 무엇을 잘못했는지 찾다가 의외로 해결책은 가까운 곳에 있었습니다.

 

https://www.snoopybox.co.kr/1613

 

윈도우에서 작성한 Shell 스크립트 리눅스에서 에러나는 경우

윈도우에서 메모장으로 작성한 Bash 스크립트 파일을 리눅스에 넣어 돌리면 오류가 발생합니다. 그 이유는 DOS와 UNIX 계열의 개행 방식이 서로 다르기 때문인데요, 눈에 보이지는 않지만 각 줄의 �

www.snoopybox.co.kr

윈도우에서는 문장 마지막에 커서를 문장 시작부분으로 옮기는 \r이 붙어있다는 사실을 처음 알았습니다.

 

결론부터 말하자면,

Windows -> Linux

sed -i -e 's/\r$//' file.sh

Linux -> Windows

sed -i -e 's/$/\r/' file.sh

 

위의 명령어를 통해서 .sh파일의 문장들을 간단하게 수정한 후 실행하면 정상적으로 작동하게 됩니다.

 

간략하게 설명해보자면,

  • sed 명령어의 경우 정규표현식을 이용해서 단순 반복작업을 간단하게 끝내버릴수 있는 명령어입니다.
  • $는 정규 표현식에서 문장의 끝을 의미하고, 따라서 \r$은 \r이 문장 끝에 등장한다는 의미가 됩니다.

sed의 옵션에 대해서는 잘 정리해 놓은 블로그 링크를 첨부합니다.

https://m.blog.naver.com/PostView.nhn?blogId=int_s&logNo=220483567708&proxyReferer=https:%2F%2Fwww.google.com%2F

 

01. sed 옵션 정리

- p 명령 : 출력 sed '/north/p' datafile -기본적으로 모든 줄을 출력하고, 패턴과 일치하는 줄을 한번 더...

blog.naver.com

 

'Linux' 카테고리의 다른 글

Linux(Ubuntu) FTP server 구축하기  (0) 2020.08.07
Posted by EnergyCastle
,