파이썬 show() 로 출력되는 화면을 이미지 파일(png, pdf)로 저장하기

프로그래밍/Python|2021. 7. 5. 08:58
반응형

from matplotlib import pyplot as plt

plt.savefig('foo.png')

plt.savefig('foo.pdf')

 

[출처] https://stackoverflow.com/questions/9622163/save-plot-to-image-file-instead-of-displaying-it-using-matplotlib

반응형

댓글()

httpd 특정 파일명 또는 확장자 로그 (access_log) 남기지 않기

리눅스/APACHE|2021. 7. 1. 10:11
반응형

# vi /etc/httpd/conf/httpd.conf

 

SetEnvifNoCase Request_URI (log.html|png)$ FILE=1  // 추가
CustomLog "logs/access_log" common env=!FILE        // 수정

 

위 예제에서는 log.html 파일 접근이나 png 확장자를 가진파일은 access_log 에 남기지 않습니다.

빨간 글씨를 적절히 수정해 빈번히 발생되는 로그는 기록하지 않을 수 있습니다.

 

수정하였으면 적용을 위해 httpd 를 재시작 합니다.

# systemctl restart httpd

 

 

반응형

댓글()

JavaScript 에서 refresh 없이 PHP 파일 실행하기

반응형

먼저 아래를 선언한 뒤에

<script id="dynamic"></script>
<script> 
function add() {
        dynamic.src = "modify.html?action=add";
}
</script>

 

이렇게 호출하면 됩니다.

<a href="JavaScript:add()">[추가]</a>

 

반응형

댓글()

[html] 깜빡이는 글자, 이미지 예제

반응형
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>jQuery Animation</title>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
    <div id="flicker" style=" width:200px; height:200px; background-color: #ff0000;"></div>
 
    <script type="text/javascript">
 
        /**
         * 깜빡이는 예제
         * flicker라는 Id를 가진 엘리먼트에 7개의 애니메이션 함수를 적용하였습니다.
         * 7개의 visual effect는 실행 대기열에 쌓여서 앞의 애니메이션 함수가 끝난후에 바로 동작을 합니다.
         */
        $("#flicker").fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn();
 
    </script>
</body>
</html>

[출처] https://kssong.tistory.com/36

 

 

반응형

댓글()

Python 에서 MySQL 연결하기

프로그래밍/Python|2021. 6. 28. 15:24
반응형

필요한 라이브러리를 설치합니다.

# pip3 install mysql-connector

 

예제 (test.py)

import mysql.connector

conn = mysql.connector.connect(
    host = "localhost",
    user = "sysdocu",
    password = "12345678",
    database = "sysdocu"
)
cursor = conn.cursor()

sql = "UPDATE log SET name=%s, status=%s, number=%s"

name = "ROBOT"
status = "have"
number = 35.123874

val = (name, status, number)
cursor.execute(sql, val)
conn.commit()

 

실행

# python3 test.py

반응형

댓글()

[에러] AttributeError: 'DataFrame' object has no attribute 'split'

프로그래밍/Python|2021. 6. 16. 07:35
반응형

데이터 형식이 다른 text_line 이 있다고 했을때 아래와 같이 실행하면

에러가 출력됩니다.

 

[코드]

text = text_line.split()

print(text)

 

[에러]

AttributeError: 'DataFrame' object has no attribute 'split'

 

[해결]

일반 문자열로 변환 후 처리합니다.

text = str(text_line).split()

print(text)

 

반응형

댓글()

Python 숫자 세자리마다 콤마 입력하기

프로그래밍/Python|2021. 6. 15. 07:46
반응형

[ 소스 ]

number = 1234567
str = "세자리 콤마\n" + str("{0:,}".format(number))
print(str)

 

[ 실행 결과 ]

세자리 콤마
1,234,567

 

 

반응형

댓글()

파이썬에서 텔레그램 메세지 보내기

프로그래밍/Python|2021. 6. 14. 14:17
반응형

사전 준비

# pip install python-telegram-bot --upgrade

 

작성

# vi send.py

import telegram

telegram_token = '1422759215:AAHUr-9IDG2nqz4f7pdVrz0YMA7pAUt9hxs'
bot = telegram.Bot(token = telegram_token)
bot.sendMessage(chat_id = 'xxxxxxxx', text="메세지 내용")

 

* token 생성과 chat_id 확인

텔레그램에서 botfather 검색 후 채팅창에 /newbot 입력, 그 다음 생성할 봇 이름을 입력하면 (예: sysdocu_bot 이렇게 뒤에 _bot 붙여야 함) HTTP API 키가 생성됩니다. (키는 중요하므로 보관합니다)

웹 브라우저에서 발급받은 토큰을 이용해 접근합니다.

URL : https://api.telegram.org/bot1426769915:AAHUr-9IDG2nqz4f9pdVrz0YMA7pAUt9hxs/getUpdates

그다음 botfather 채팅창에 자세히 보면 t.me/sysdocu_bot 이런 형식의 봇 링크가 있습니다. 클릭하고 들어가 /start 라고 입력해줍니다.

또다시 위의 URL 로 접근하면 "id":xxxxxxxx 이런 chat_id 값을 확인 할 수 있습니다.

 

실행

# python send.py

 

이미지와 함께 보내려는 경우 아래와 같이 수정하여 사용하면 됩니다.

 

bot.sendMessage(chat_id='xxxxxxxx', parse_mode='HTML', text="<a href='http://sysdocu.tistory.com/image.png'> </a>메세지 내용")

 

반응형

댓글()

쉘스크립트 수 비교하기

프로그래밍/BASH SHELL|2021. 6. 10. 11:34
반응형

기본 예제

#!/bin/bash

Boy="160"
Girl="158"

if [ "${Boy}" -gt "${Girl}" ]; then
        echo "소년이 더 큽니다. "
elif [ "${Boy}" -lt "${Girl}" ]; then
        echo "소녀가 더 큽니다. "
else

        echo "소년과 소녀가 같습니다."
fi

 

비교 연산자

A -lt B : A가 B보다 작습니다.
-le : 작거나 같습니다.

-gt : 큽니다.
-ge : 크거나 같습니다.
-eq : 같습니다.
-ne : 다릅니다.

 

반응형

댓글()

안드로이드 비정상 종료 감지 처리 (어플 재시작)

반응형

아래 내용을 소스에 추가합니다.

(MainActivity 에서 감지시 초기 화면 SplashActivity 로 이동)

 

 

첫번재 방법

 

        // 비정상 종료시 어플 재시작
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread thread, Throwable ex) {
            Intent crashedIntent = new Intent(MainActivity.thisSplashActivity.class);

                Toast.makeText(MainActivity.this, "비정상 종료 되어 재시작 합니다.", Toast.LENGTH_SHORT).show();

                //crashedIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                crashedIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(crashedIntent);
                System.exit(0);
            }
        });

 

 

두번째 방법

 

링크 참조

https://ssaurel.medium.com/how-to-auto-restart-an-android-application-after-a-crash-or-a-force-close-error-1a361677c0ce

 

반응형

댓글()

안드로이드 와이파이 SSID 가져오기

반응형

Android 8 에서 동작하던 SSID 가져오기가 Android 11 에서 안되는 현상이 확인되었습니다.

구글링 해보니 runtime permission 적용하면 된다고 하여 아래소스를 찾아 적용하였습니다.

(기능 사용시 권한 부여)

 


public String SSID = null;


tryToReadSSID(); // 호출하여 아래 내용 실행


    // SSID 가져오기
    private void tryToReadSSID() {
        // If requested permission isn't Granted yet
        if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // Request permission from user
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 101);
        } else { // Permission already granted
            WifiManager wifiManager = (WifiManager) getActivity().getApplicationContext().getSystemService(WIFI_SERVICE);
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            if(wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
                SSID = wifiInfo.getSSID().replaceAll("\"", ""); // SSID 앞뒤에 있는 따옴표 제거하고 SSID 변수에 입력
            }
        }
    }
 

 

반응형

댓글()