반응형
curl

curl 사용법

패킷/메시지를 네트웍으로 전송하는 유용한 유틸리티입니다. HTTP/S로 GET/POST 등으로 데이터를 전송할 수 있습니다.

  • 설치

  • curl -h 를 하면 옵션이 다 나온다. 너무 많은 내용으로 읽어보기 어렵다. 필요할 때 마다 찾아서 사용하거나 아래 예제를 통해 옵션들을 배워보자.

사용 방법

많이 사용되는 옵션

  • v : 상세로그 보기
  • o : 출력 파일 지정
  • O : 출력 파일명을 자동으로 원격지 파일명과 동일
  • H : 헤더 추가
  • A : 에이전트 추가
  • d : 데이터 추가로 폼 데이터나 JSON 데이터 등을 POST로 보낸다. (단, -G 옵션이 있으면 GET으로 적용된다.)

HTML 받아오기(기본사용)

URL 주소만 뒤에 주면 알아서 받아온다. (GET방식) image

파일 받아오기

URL 주소가 image나 zip 등 바이너리 파일 주소인 경우 텍스트 출력이 아니라 파일로 받아오기. 단순하게 파일 받는 용도로 쓸 거면 wget 유틸리티가 더 편하다.
- URL 뒤에 --output 옵션으로 저장할 파일명을 지정한다. (–output 은 -o 와 같다. 대문자 -O로 하면 뒤에 파일명 지정할 필요가 없다. 원격지 파일명과 동일한 파일명으로 자동으로 생성한다.)

curl https://curl.haxx.se/windows/dl-7.66.0_2/curl-7.66.0_2-win64-mingw.zip -o a.zip
curl https://curl.haxx.se/windows/dl-7.66.0_2/curl-7.66.0_2-win64-mingw.zip -O

HTTP 헤더 보기

$ curl 주소 : 해당 주소의 html content만 출력
$ curl -i 주소 : 해당 주소의 html 헤더와 content를 모두 출력
$ cur -I 주소 : 해당 주소의 html 헤더만 출력 (-I는 --head와 같다)

GET에 추가 정보

헤더 추가
$ curl -H “Host: test.com” -H “name:jun” [주소] : 헤더 정보 추가하기. -H를 여러 번 사용할 수 있다.

User-Agent 추가
$ curl -A “Mozilla/5.0” [주소] : -A 뒤에 지정.
일반적으로 에이전트를 식별하거나 브라우져인척 가장하기 위해 사용한다.

URL 파라미터 추가
$ curl [주소]?key=value&key=value… : URL뒤에 파라미터를 지정.
$ curl -G [주소] -d “key=value&key=value” : -d 옵션은 POST DATA로 지정하는데, -G 옵션을 주면 GET방식 파라미터로 변한다.
$ curl -G [주소] -d “key=value” -d “key=value” : -d 옵션을 나눌 수도 있다.
즉, 위와 같이 입력하면 자동으로 [주소]?key=value&key=value 이런식으로 변환되어 GET으로 요청된다.

POST 사용하기

데이터추가
$ curl -X POST [주소] -d “데이터” : -X POST 옵션은 생략가능 (content-type 지정이 없으면 application/x-www-form-urlencoded 타입으로 보낸다.)

FORM 데이터 추가
HTML의 FORM에 name으로 지정된 부분에 값을 채워서 POST할 경우 사용한다. name을 key로 하여 아래처럼 값을 채워 보낸다.
$ curl -X POST [주소] -d “key=value&key=value&…” : (-X POST는 생략 가능. -d는 --data와 같다)
$ curl -X POST [주소] -d “key=value” -d “key=value” : (상동)
$ curl [주소] --data-urlencode ‘msg=한글’ --data-urlencode ‘name=kkk’ : url인코딩 변환 후 보낸다.

JSON으로 보내기
$ curl -H ‘Content-Type: application/json’ -X POST [주소] -d ‘{“id”:“abc”, “pwd”:“def”}’
$ curl -H “Content-Type: application/json” http://localhost:18899/sum -d “{\“a\”:10,\“b\”:20}”

DOS 커맨드에서는 데이터를 "로 감싸고 내부에 "가 있으면 \를 앞에 추가해 줘야 한다. Linux에서는 바깥을 '로 감싸면 된다. -d 옵션이면 POST로 가기 때문에 별도로 -X 옵션은 필요없다.

그 외 방법으로 사용하기

DELETE로 요청하기
$ curl -X DELETE -G [주소] -d key=value -d key=value
HTTP 인증
$ curl -v -u ID:PASSWORD [주소]

리눅스에서 웹서버 정상 체크 스크립트

#!/bin/bash

if [ "$#" -lt 1 ]; then
    echo "Usage: $0 [URL]"
    exit 1
fi

SVR=$1
RES=$(curl -L -s -o /dev/null -w "%{http_code}" ${SVR})

if [ ${RES} -ne 200 ];then
    echo "${SVR} fail: ${RES}"
    exit ${RES}
fi;

Author: crazyj7@gmail.com
Written with StackEdit.

반응형

노트북(ipynb)과 스크립트(py) 변환

ipynb를 다른 형식으로 변환

$ jupyter nbconvert --to script abc.ipynb
abc.py

$ jupyter nbconvert --to html abc.ipynb
abc.html

양방향 전환하는 유틸리티

  • ipynb와 py를 양방향으로 전환이 가능하다. (파라미터1을 파라미터2로 (확장자명) 변환한다.)

$ pip install ipynb-py-convert

설치 후, 아래 커맨드로 원하는 방향으로 변환한다.

$ ipynb-py-convert a.py a.ipynb

$ ipynb-py-convert b.ipynb b.py

'Python' 카테고리의 다른 글

웹 크롤링 Crawl 1편  (0) 2019.10.24
인코딩에러 cp949  (1) 2019.10.02
ipynb 노트북 파일 형상관리  (1) 2019.09.27
초간단 python 서버만들기2  (0) 2019.09.25
초간단 웹API서버만들기  (0) 2019.09.25
반응형
ipynbgit

jupyter 노트북 ipynb과 git 연동시 문제

ipynb 노트북 파일을 git에 올려서 형상관리를 하기란 쉽지 않다. 소스코드만이 아니라 output 이 포함되어 있고, 그 외 라인 번호 등 여러가지 추가 정보들 때문에 diff 하기도 정말 어려울 때가 많다. 나중에 충돌 발생하면 어떤 게 최신인지 모를 정도다.
정말 소스 텍스트만 diff 해 주면 좋을 텐데. 충돌도 덜 날 수 있을 텐데.
방법이 없을까???

jupytext를 이용하자.
jupytext를 사용하면 ipynb와 py를 쌍으로 자동 동기화가 가능하다. 주의할 점은 파일명은 동일하고 확장자명만 변경되므로 중복되지 않도록 조심해야 한다.

jupyter notebook에서 ipynb나 py 아무거나 연다음 jupytext 메뉴에 pair로 연결하게 하면 쌍으로 (ipynb, py) 파일이 생성되고, 어느 한 쪽이 수정되면 자동 변경 감지하여 업데이트하게 된다.
이로써 형상관리는 ipynb대신 py 파일 (script)만 관리하게 되면 편리하다. (diff도 source script만 하게되어 변경 내역을 확인할 수 있다.)

사용 준비

먼저 설치 패키지

pip install jupytext --upgrade

설정 변경
jupyter notebook --generate-config

.jupyter/jupyter_notebook_config.py 설정 파일 수정 (윈도우는 %USERPROFILE% 경로에서 찾으면 되고, 리눅스는 ~(home)에서 찾으면 된다.)
다음을 찾아 수정 또는 추가한다.

c.NotebookApp.contents_manager_class="jupytext.TextFileContentsManager"

노트북 재시작. (jupyter notebook)
ipynb 노트북 코드 생성을 하면 쌍으로 .py 파일이 생성된다.

image

Jupyter Lab은???

jupyter lab에서도 동일하게 사용할 수 있다. 왼쪽에 메뉴로 들어가서 jupy로 검색하면 pair가 있다. (jupytext 패키지가 설치된 경우)

image

Author: crazyj7@gmail.com

'Python' 카테고리의 다른 글

인코딩에러 cp949  (1) 2019.10.02
ipynb와 py 양방향 전환  (2) 2019.09.30
초간단 python 서버만들기2  (0) 2019.09.25
초간단 웹API서버만들기  (0) 2019.09.25
그래프 리셋(seaborn plot graph reset)  (0) 2019.09.20
반응형
flask2

초간단 웹서버 만들기2

1편과 같은 코드를 좀 더 간단하게 줄일 수 있다.

annotation을 추가하면 좀 더 직관적으로 보기가 편하다.
사용 방법은 URL과 method를 연결할 함수 정의부 앞에 추가해 주면 된다.

다음은 간결해진 코드이다. (이번에는 로그 기능을 off하였다)

'''
test api server
'''

from flask import Flask, request
from flask_restful import Resource, Api
from flask.views import MethodView

import logging
import json,base64

import os, sys
import datetime
import threading, time

app = Flask(__name__)

# log = logging.basicConfig(filename='testsvr.log', level=logging.INFO)
# 로깅을 전부 끄기
log = logging.getLogger('werkzeug')
log.disabled = True
app.logger.disabled = True

'''
/apitest1
'''
@app.route('/apitest1', methods=['GET'])
def apitest1_get():
    data = request.args
    print('recv:', data)  # dictionary
    abc = data.get('abc')
    if abc :
        result = 'This is GET method!'+str(abc)
    else:
        result = 'Hello World! input abc'
    return result

@app.route('/apitest1', methods=['POST'])
def apitest1_post():
    # get과 동일하게 작동
    return apitest1_get()


'''
/sum
'''
@app.route('/sum', methods=['GET'])
def sum_get():
    data = request.args
    print('recv:', data)  # dictionary
    return 'Hello.'

@app.route('/sum', methods=['POST'])
def sum_post():
    logging.info('sum test')
    # print('request.data=', request.data)  # binary data read all
    data=request.get_json(force=True) # parse json string
    print('request.json=', data)
    a = data['a']
    b = data['b']
    now = datetime.datetime.now()
    print(now)
    timestr = now.strftime('%Y%m%d %H:%M:%S')
    result = {
        'sum':int(a+b),
        'time':timestr
    }
    logging.info('result='+json.dumps(result))
    return result

port = 18899
if __name__=='__main__':
    print('Start Server... port=', port)
    logging.info('start server')
    app.run(host='0.0.0.0', port=port, debug=False)
    # 디버그 모드로 하면 소스 수정시 자동으로 서버 재시작이 된다.


Written with StackEdit.

'Python' 카테고리의 다른 글

ipynb와 py 양방향 전환  (2) 2019.09.30
ipynb 노트북 파일 형상관리  (1) 2019.09.27
초간단 웹API서버만들기  (0) 2019.09.25
그래프 리셋(seaborn plot graph reset)  (0) 2019.09.20
JupyterLab에서 Python Script(.py)실행하기  (0) 2019.09.19
반응형
flask

Simple Python Web API Server

쉽고 빠르게 웹 API 서버를 만드는 방법.
언어는 Python
아래 방식을 참고하면 아주 빠르고 간단하고 쉽게 API 서버를 만들 수 있다. 여기에 서비스에 필요한 작업들을 추가만 해 주면 된다.
POST 방식으로 JSON 포맷을 사용하여 통신하는 것을 추천한다.

개발툴로 PyCharm을 사용
패키지 설치

# pip install flask
# pip install flask_restful

아래 코드를 작성한다.

  • testsvr . py
'''
test api server
'''

from flask import Flask, request
from flask_restful import Resource, Api
from flask.views import MethodView

import logging
import json,base64

import os, sys
import datetime
import threading, time

app = Flask(__name__)
api = Api(app)

log = logging.basicConfig(filename='testsvr.log', level=logging.INFO)

# 로깅을 전부 끄기
# logging.getLogger('werkzeug')
# log = logging.get
# log.disabled = True
# app.logger.disabled = True

'''
/apitest1
'''
class apitest1(MethodView):
    def get(self):
        data = request.args
        print('recv:', data)  # dictionary
        abc = data.get('abc')
        if abc :
            result = 'This is GET method!'+str(abc)
        else:
            result = 'Hello World! input abc'
        return result

    def post(self):
        # get과 동일하게 작동
        return self.get()


'''
/sum
'''
class sum(MethodView):
    def get(self):
        data = request.args
        print('recv:', data)  # dictionary
        return 'Hello.'

    def post(self):
        '''
        JSON으로 받아서 작업 후 JSON으로 결과 반환
        '''
        logging.info('sum test')
        # print('request.data=', request.data)  # binary data read all
        data=request.get_json(force=True) # parse json string
        print('request.json=', data)
        a = data['a']
        b = data['b']
        now = datetime.datetime.now()
        print(now)
        timestr = now.strftime('%Y%m%d %H:%M:%S')
        result = {
            'sum':int(a+b),
            'time':timestr
        }
        logging.info('result='+json.dumps(result))
        return result


api.add_resource(apitest1, '/apitest1')
api.add_resource(sum, '/sum')

port = 18899

if __name__=='__main__':
    print('Start Server... port=', port)
    logging.info('start server')
    app.run(host='0.0.0.0', port=port, debug=True)
    # 디버그 모드로 하면 소스 수정시 자동으로 서버 재시작이 된다.


서버 구동 스크립트는 다음을 참고

---testsvr.bat---
c:\python37\scripts\python testsvr.py

---testsvr.sh---
#!/bin/bash  
  
# [python env path...]/bin/python testsvr.py  
# linux ex)  
/opt/anaconda3/envs/tensorflow/bin/python testsvr.py  
# windows command ex)  
# c:\python37\scripts\python testsvr.py

테스트 화면 : GET 방식
주소: http://localhost:18899/apitest1?abc=123&def=456
image

테스트 화면 : POST 방식, 덧셈 API
주소: http://localhost:18899/sum
POST 데이터: {“a”:5, “b”:6}
image

Written with StackEdit.

반응형
screenvideocapture

Screen Capture (Video)

PC 화면의 일부를 캡쳐하는 방법은 많이 있는데…
PC 화면의 일부나 특정 윈도우를 간단하게 영상을 캡쳐하고 싶을 때는 어떻게 해야 할까? 무료 유틸리티를 사용하고 싶다.

먼저 Free License 유틸리티로 동영상 처리 관련된 강력한 프로그램인 ffmpeg를 권장한다.
물론 사용 방법은 커맨드 등을 익혀야 되서 복잡할 수 있지만, 여기서는 이것을 dos batch script로 만들어서 한 번만 만들어 두면 이후에 공짜로 편하게 사용할 수 있다.

  1. 프로그램 설치

구글에서 ffmpeg windows download 라고 검색해서 설치한다.
잘 모르겠으면 윈도우 패키지 링크 주소는
ffmpeg windows 64 bit binary download
다운 받은 파일을 열어 압축을 풀면 bin 폴더가 있다. bin 폴더의 파일들을 c:\windows에 복사하자. (별도 유틸리티 폴더를 만들고, 환경설정으로 PATH에 설정해 두는 것이 좋긴하지만 귀찮으면 위와 같이 한다.)
이제 DOS 커맨드 창에서 ffmpeg라고 실행해서 잘 되는지 확인한다.
image

  1. 스크립트 작성

스크립트1: 특정 윈도우 창만 캡쳐하기
ffmpeg_videocap.bat “윈도우제목” "파일명"
파일명.mp4로 파일이 생성됨.

@echo off
if "%1"=="" goto usage

:: by crazyj7@gmail.com
:: famerate ; 24, 30. 60 
:: 파일 확장자는 mp4, avi, mpg 등 
:: drawmouse : 마우스 커서를 보여줄지 여부 (1/0)

ffmpeg -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 0 -i title="%1" -c:v libx264 -r 30  -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" "%2.mp4"

goto:eof

:usage
echo Usage)
echo %0 "window title" "filename"
goto:eof

스크립트2: 전체 화면 동영상 캡쳐하기 (모니터가 2개면 둘 다 캡쳐된다.)
ffmpeg_videocap_fullscreen.bat "파일명"

파일명.mp4 파일 생성됨.

@echo off
if "%1"=="" goto usage
 
:: crazyj7@gmail.com 
:: famerate ; 24, 30. 60 
:: 파일 확장자는 mp4, avi, mpg 등 
:: drawmouse : 마우스 커서를 보여줄지 여부 (1/0)
 
ffmpeg -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "%1.mp4"
 
goto:eof
  
:usage
echo Usage)
echo %0 "filename"
goto:eof

스크립트3: 전체 화면 동영상 캡쳐하기. (모니터2개인경우 모니터1만)
주의! 모니터1의 해상도 값으로 코드를 바꿔줘야 한다. (1280x1080 예이다.)
특정 영역 캡쳐하기도 된다. (offset과 크기 조정)
ffmpeg_videocap_full1280x1080.bat “파일명”

@echo off
if "%1"=="" goto usage

:: crazyj7@gmail.com
:: famerate ; 24, 30. 60 
:: 파일 확장자는 mp4, avi, mpg 등 
:: drawmouse : 마우스 커서를 보여줄지 여부 (1/0)

ffmpeg -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 1 -offset_x 0 -offset_y 0 -video_size 1920x1080 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "%1.mp4"

goto:eof

:usage
echo Usage)
echo %0 "filename"
goto:eof

  1. 실행
  • 커맨드 실행 종료 (녹화 종료)는 q 또는 ^c(컨트롤c)

특정 윈도우만 동영상 캡쳐를 하려면 아래와 같이 한다.
윈도우 타이틀은 창의 상단에 타이틀바에 기록된 스트링이다. (없거나 못 찾을 경우는 화면 일부영역 캡쳐를 참고하기 바란다.)

c:\temp> ffmpeg_videocap “stackedit” “aaa”
"stackedit"란 제목의 창을 찾아 aaa.mp4 동영상 파일을 생성한다.
aaa

전체화면 동영상 캡쳐
c:\temp> ffmpeg_videofullscreen “full”
전체 화면을 녹화하여 full.mp4 파일이 생성된다. (모니터가 2개면 둘 다 나온다.)
full

모니터1만 캡쳐 또는 일부 영역만 캡쳐
(일부 영역을 지정하려면 스크립트를 수정하여 offset과 size를 조정하면 된다.)
c:\temp> ffmpeg_videofullscreen_1920_1080 “full2”
모니터1만 (1920x1080 해상도) 녹화하여 full2.mp4 동영상 파일을 생성한다.
full2

  1. 보너스 (동영상을 gif로)

생성한 동영상 파일을 움직이는 gif 파일로 변환하기
ffmpeg -i aaa.mp4 aaa.gif
브라우저에 aaa.gif 파일을 드래그드롭하면 움직이는 gif 파일이 재생된다. (웹에 올리기 편하다.)

image

Written with StackEdit.

'Develop > Windows' 카테고리의 다른 글

DOS Batch Script  (0) 2019.10.06
curl 사용법/HTTP 테스트  (0) 2019.10.01
windows 10 kernel structure  (0) 2015.08.28
윈도우8/8.1에서 visual studio 2008 설치실패시 / .net framework 설치  (0) 2015.08.20
64비트 프로그래밍  (2) 2015.06.05
반응형
graphsetting_reset

그래프 설정 리셋

가끔가다 그래프 설정의 변경으로 잘 나오던 그래프가 깨지는 경우가 종종 나온다. matplotlib과 seaborn 등 여러가지를 막 섞어 쓰다보면 가끔 발생한다.

다음과 같이 잘 나오던 그래프가
image

어느 순간 다시 똑같은 코드를 실행했는데, 이런 결과가…
(위와 아래는 똑같은 코드다.)
image

Jupyter Lab에서 커널을 다시 기동해야지만 다시 원래대로 나오는데, 마찬가지로 중간에 어떤 작업으로 인해 그래프 설정이 변경되면 위와 같이 다시 이상하게 출력되었다. 나중에 원인을 찾아보니… 아래의 sns.set() 코드였다.
image
이후 부터는 이상한 그래프가 출력된 것이다. 원상 복구를 하는 것을 찾아보다가 reset해 주는 코드를 찾았다.
또한 설정값 변경된 것을 확인해 주는 코드도 있다.

image
위와 같이 pltconfig_default() 함수를 만들어 사용하면 원래 설정대로 복원된다.

참고로 다음은 plot 설정값이 디폴트에서 변경된 내역을 찾아주는 코드다.

# plot 환경설정 기본값과 달라진 점
class DictDiffer(object):
    """
    Calculate the difference between two dictionaries as:
    (1) items added
    (2) items removed
    (3) keys same in both but changed values
    (4) keys same in both and unchanged values
    """
    def __init__(self, current_dict, past_dict):
        self.current_dict, self.past_dict = current_dict, past_dict
        self.set_current, self.set_past = set(current_dict.keys()), set(past_dict.keys())
        self.intersect = self.set_current.intersection(self.set_past)
    def added(self):
        return self.set_current - self.intersect 
    def removed(self):
        return self.set_past - self.intersect 
    def changed(self):
        return set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])
    def unchanged(self):
        return set(o for o in self.intersect if self.past_dict[o] == self.current_dict[o])
    
def pltconfig_check():
    d=DictDiffer(plt.rcParams, plt.rcParamsDefault)
    for it in d.changed():
        print(it, plt.rcParamsDefault[it], plt.rcParams[it])

위에서 sns 환경설정 변경으로 기존의 세팅과 변경된 내역을 확인해 보자.
image
상당히 많은 설정값들이 변경된 것을 확인하였다.

image

다시 원래 디폴트로 돌아온 것이다. 위에서 나온 변경내역은 matplotlib inline으로 인해 변경된 내역이므로 신경쓰지 않아도 된다.

Author: crazyj7@gmail.com
Written with StackEdit.

'Python' 카테고리의 다른 글

초간단 python 서버만들기2  (0) 2019.09.25
초간단 웹API서버만들기  (0) 2019.09.25
JupyterLab에서 Python Script(.py)실행하기  (0) 2019.09.19
Jupyter Notebook 멀티라인출력  (0) 2019.09.19
진행(progress)바/ tqdm  (2) 2019.08.28
반응형
jupyterlabrunscript

JupyterLab에서 Python Script 실행

Jupyter Lab에서 노트북 ipynb 파일을 지원하는데 가끔은 python script (.py) 파일을 실행하고 싶을 때가 있다. 편리하게 실행할 방법은??

  • 일단 Jupyter Lab에서 python script 파일을 연다. (더블클릭)
  • 에디터 창에서 마우스 우클릭하여 콘솔 실행
    image
    -아래에 IPython 콘솔창이 화면분할되어 실행될 것이다. 파이썬 코드에서 plot 출력이 있다면 %matplotlib inline을 실행해 줘야 plot이 출력된다. (스크립트에 이미 이 코드가 포함되어 있으면 이 과정은 생략한다.)
    image
    -마지막으로 스크립트 에디터 창에서 컨트롤A (전체선택), 쉬프트엔터(실행) 하면 끝이다.
    image

Author: crazyj7@gmail.com

'Python' 카테고리의 다른 글

초간단 웹API서버만들기  (0) 2019.09.25
그래프 리셋(seaborn plot graph reset)  (0) 2019.09.20
Jupyter Notebook 멀티라인출력  (0) 2019.09.19
진행(progress)바/ tqdm  (2) 2019.08.28
Google Drive file upload/download  (0) 2019.08.20
반응형
multilineoutput

Jupyter Notebook에서 멀티라인 출력

Jupyter Notebook에서 변수값을 출력하기 위해서는 한 셀내에 변수명이나 함수명을 주면 해당 값(변수값, 리턴값)이 출력된다. 그러나 한 셀내에 여러 개의 변수명을 출력하고자 하게 되면 마지막 변수 한 개 값만 출력된다.
한 셀내의 여러 명령줄의 모든 출력을 하려면 각각의 변수 앞에 별도로 print 문을 사용해야 하는데 이쁘게 출력되지도 않고 매우 번거로운 작업이다.
이것을 한 번에 해결 할 수 있다.

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
  • Before: 한 셀에 복수개 출력 시도시 마지막값만 나온다.
    numpy_before

  • After:
    한 셀에 멀티 출력 지원
    numpy_after_multiline

Author: crazyj7@gmail.com
Written with StackEdit.

'Python' 카테고리의 다른 글

그래프 리셋(seaborn plot graph reset)  (0) 2019.09.20
JupyterLab에서 Python Script(.py)실행하기  (0) 2019.09.19
진행(progress)바/ tqdm  (2) 2019.08.28
Google Drive file upload/download  (0) 2019.08.20
Fourier Transform Python  (1) 2019.08.02
반응형
progressbar_tqdm

진행상황 tqdm

패키지 설치를 할 때 보면 나오는 텍스트 타입의 진행바 모양이 있다. 작업이 어느 정도 진행되었고 남았는지 알 수 있어서 없는 것보다는 답답함이 해결되는 효과가 있다.

이것을 구현하기 위해서는 tqdm 패키지를 사용하면 된다. tqdm의 파라미터로 iterable 객체를 넣어주면 알아서 전체 반복 횟수 중 진행반복횟수를 표시해 준다.

from tqdm import tqdm
import time
for i in tqdm(range(100)):
   time.sleep(0.01)

콘솔 출력문을 추가했을 경우 아래와 같이 된다. (없으면 한 줄로 업데이트 진행됨)
progress1

  • range(30, 100) 으로 파라미터를 줄 경우, 전체 반복량은 70이므로 0/70부터 시작하여 70/70까지 진행 표시된다.

progress2

파라미터 설명

  • iterable : 반복자 객체
  • desc : 진행바 앞에 텍스트 출력
  • total : int, 전체 반복량
  • leave : bool, default로 True. (진행상태 잔상이 남음)
  • ncols : 진행바 컬럼길이. width 값으로 pixel 단위로 보임.
  • mininterval, maxinterval : 업데이트 주기. 기본은 mininterval=0.1 sec, maxinterval=10 sec
  • miniters : Minimum progress display update interval, in iterations.
  • ascii : True로 하면 '#'문자로 진행바가 표시됨.
  • initial : 진행 시작값. 기본은 0
  • bar_format : str
  • 전체 작업량을 알고 있고, 처리된 량으로 진행바를 표시할 경우. (update에 진행량을 파라미터로 추가). 파일 읽기 같은 경우 활용가능하다.
t = tqdm(total=500)
for i in range(250):
    time.sleep(0.01)
    t.update( 2 )
t.close()
  • clear() : 삭제

  • refresh() : 강제 갱신

  • 중간부터 진행되는 경우. 전체 작업량이 500인데, 100은 이밎 처리되서 100부터 시작하는 경우.

t = tqdm(total=500, initial=100, ascii=True)
for i in range(200):
    time.sleep(0.01)
    t.update( 400/200 )
t.close()

Written with StackEdit.

'Python' 카테고리의 다른 글

JupyterLab에서 Python Script(.py)실행하기  (0) 2019.09.19
Jupyter Notebook 멀티라인출력  (0) 2019.09.19
Google Drive file upload/download  (0) 2019.08.20
Fourier Transform Python  (1) 2019.08.02
[UI] Qt5  (0) 2019.05.17

+ Recent posts