Инструменты пользователя

Инструменты сайта


develop:pyton:sqlite

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:pyton:sqlite [2022/08/14 07:56]
admin
develop:pyton:sqlite [2024/07/15 05:29] (текущий)
admin
Строка 2: Строка 2:
  
  
-==== Аргументы командной строки ==== +===== Модули/Настройки окружения ===== 
-Параметры с префиксом тире необязательные, без префикса обязательные они видимо и являются обязательными\\+<code bash> 
 +  # Установка модуля для конкретного python 
 +python3.8 -m pip install pyTelegramBotAPI 
 +  # Модуль для телеграм бота бота 
 +pyTelegramBotAPI 
 +  # Модуль для json логов 
 +python-json-logger 
 +  # Модуль для виндовых хостов 
 +/usr/bin/python3.9 -m pip install pywinrm 
 +знать на каком именно питоне работает ансибл ansible --version)
  
 +  # 
 +pip3 install --upgrade pip
 +pip3 install --upgrade setuptools
 +</code>
 +
 +
 +===== Аргументы командной строки =====
 +Параметры с префиксом тире необязательные, без префикса обязательные они видимо и являются обязательными\\
 <details> <details>
   * **name or flags** - или имя, или список строк опций, например foo или -f, --foo,   * **name or flags** - или имя, или список строк опций, например foo или -f, --foo,
Строка 48: Строка 65:
  
  
-==== Web API === 
  
 +===== Zabbix Web API =====
 <details> <details>
 <summary>:!: Обращение к Zabbix, работа с JSON результатом</summary> <summary>:!: Обращение к Zabbix, работа с JSON результатом</summary>
Строка 101: Строка 118:
  
  
-==== SQLite ==== +===== SQLite =====
 <details> <details>
 <summary>:!: Работа с SQLite </summary> <summary>:!: Работа с SQLite </summary>
Строка 132: Строка 148:
 #for row in cur.fetchall(): #for row in cur.fetchall():
 #        print(row)</code> #        print(row)</code>
- 
  
 # #
Строка 144: Строка 159:
 #for member in r: #for member in r:
 #    print(member[0]+ ' -==- '+ member[1]) #    print(member[0]+ ' -==- '+ member[1])
- 
 </details> </details>
  
Строка 178: Строка 192:
         self.cur.execute('select `MessageId` from `IdMessages` where `AlertId`= "'+AlertId+'"; ');         self.cur.execute('select `MessageId` from `IdMessages` where `AlertId`= "'+AlertId+'"; ');
         return self.cur.fetchall();         return self.cur.fetchall();
- 
- 
  
 def main(): def main():
Строка 218: Строка 230:
             print(answer.json());             print(answer.json());
             print('***************************************');             print('***************************************');
-     
     #print(answer.json());     #print(answer.json());
- 
  
 if __name__ == "__main__": if __name__ == "__main__":
Строка 228: Строка 238:
  
  
-==== Работа с текстом === 
  
 +===== Работа с текстом =====
 <details> <details>
 <summary>:!: Разбор auth.log </summary> <summary>:!: Разбор auth.log </summary>
Строка 295: Строка 305:
  
  
-==== e-mail === +===== e-mail =====
 <details> <details>
 <summary>:!: Отправка письма</summary> <summary>:!: Отправка письма</summary>
Строка 304: Строка 313:
 <code python> <code python>
 #!/usr/bin/python3 #!/usr/bin/python3
- 
 import smtplib import smtplib
  
Строка 337: Строка 345:
               server="127.0.0.1"):               server="127.0.0.1"):
     assert isinstance(send_to, list)     assert isinstance(send_to, list)
- 
     msg = MIMEMultipart()     msg = MIMEMultipart()
     msg['From'] = send_from     msg['From'] = send_from
Строка 364: Строка 371:
  
  
-==== Файлы === 
  
 +===== Файлы =====
   * **read()** - загружает **весь файл в ОЗУ**   * **read()** - загружает **весь файл в ОЗУ**
   * **readline()** - читает одну строчку   * **readline()** - читает одну строчку
   * **for line in file:** - цикл обработки всего файла построчно   * **for line in file:** - цикл обработки всего файла построчно
-  * ** ** -  
- 
 <details> <details>
 <summary>:!: Последовательная обработка файла </summary> <summary>:!: Последовательная обработка файла </summary>
Строка 387: Строка 392:
  
  
-==== WSGI Server ===+===== WSGI Server =====
 Сервер может обрабатывать веб запросы, передавать их приложениям\\ Сервер может обрабатывать веб запросы, передавать их приложениям\\
- 
 Переменная **environ** содержит служебную информацию о клиенте\\ Переменная **environ** содержит служебную информацию о клиенте\\
 В **start_response** собсна помещаем ответ В **start_response** собсна помещаем ответ
- 
 <details> <details>
 <summary>:!: Простой ответ на веб запросы к хосту </summary> <summary>:!: Простой ответ на веб запросы к хосту </summary>
 <code python> <code python>
 #!/usr/bin/python3 #!/usr/bin/python3
- 
 import wsgiserver import wsgiserver
 from wsgiref.simple_server import make_server, demo_app from wsgiref.simple_server import make_server, demo_app
Строка 421: Строка 423:
 </code> </code>
 </details> </details>
- 
  
  
Строка 428: Строка 429:
 **raw** получаем вручную\\ **raw** получаем вручную\\
 **pip install beautifulsoup4**\\ **pip install beautifulsoup4**\\
- 
 <code python> <code python>
 from bs4 import BeautifulSoup from bs4 import BeautifulSoup
Строка 473: Строка 473:
         outfile.write(';\t'.join(line)+ '\n')         outfile.write(';\t'.join(line)+ '\n')
         count += 1         count += 1
-     
     print("Всего записей - "+ str(count))     print("Всего записей - "+ str(count))
- 
  
 if __name__ == "__main__": if __name__ == "__main__":
Строка 483: Строка 481:
  
  
-==== Yandex Disk API === 
  
 +===== Yandex Disk API =====
 <details> <details>
 <summary>:!: Yandex Disk API </summary> <summary>:!: Yandex Disk API </summary>
Строка 541: Строка 539:
                         '{0}/{1}{2}/{3}'.format(savepath, date_folder, address.replace(loadpath, ""), file))                         '{0}/{1}{2}/{3}'.format(savepath, date_folder, address.replace(loadpath, ""), file))
         bar.finish()         bar.finish()
- 
  
 if __name__ == '__main__': if __name__ == '__main__':
Строка 547: Строка 544:
     #backup('Backup', os.getcwd())     #backup('Backup', os.getcwd())
 </code> </code>
- 
 {{:develop:pyton:screenshot_4.jpg?direct&800|}} {{:develop:pyton:screenshot_4.jpg?direct&800|}}
- 
 </details> </details>
  
Строка 555: Строка 550:
 <details> <details>
 <summary>:!: Yandex Disk API. += На скорую руку, загрузка указанного файла </summary> <summary>:!: Yandex Disk API. += На скорую руку, загрузка указанного файла </summary>
- 
 <code python> <code python>
 #!/bin/python3 #!/bin/python3
Строка 621: Строка 615:
     create_folder(diskFolder)     create_folder(diskFolder)
     upload_file(uploadFilePath, '{0}/{1}'.format(diskFolder, currDateTime+'_'+ uploadFilePath.split('/')[-1] ))     upload_file(uploadFilePath, '{0}/{1}'.format(diskFolder, currDateTime+'_'+ uploadFilePath.split('/')[-1] ))
-     
- 
  
 if __name__ == '__main__': if __name__ == '__main__':
Строка 633: Строка 625:
  
  
-==== Хеш функции. Hashlib ===+===== Хеш функции. Hashlib =====
 Читать файл лучше всего по блокам, функцией **update()** данные помещаются в объект, можно делать это поблочно\\ Читать файл лучше всего по блокам, функцией **update()** данные помещаются в объект, можно делать это поблочно\\
 Собсна каждый алгоритм имеет свою функцию, с соответствующим названием\\ Собсна каждый алгоритм имеет свою функцию, с соответствующим названием\\
 **digest()** - хеш в виде байтов, **hexdigest()** в виде строки\\ **digest()** - хеш в виде байтов, **hexdigest()** в виде строки\\
- 
- 
 <details> <details>
 <summary>:!: Хеш строка из файла </summary> <summary>:!: Хеш строка из файла </summary>
Строка 652: Строка 642:
     hsh.update(fileData)     hsh.update(fileData)
 result= hsh.hexdigest() result= hsh.hexdigest()
- 
 print(result) print(result)
 </code> </code>
Строка 662: Строка 651:
 <code python> <code python>
 #!/usr/bin/python3 #!/usr/bin/python3
- 
 import hashlib, argparse, os import hashlib, argparse, os
  
Строка 673: Строка 661:
     # Хеш из проверяемого файла     # Хеш из проверяемого файла
     #checkFileHash= GetHash(args.filename)     #checkFileHash= GetHash(args.filename)
- 
     # Перебираем целевую папку     # Перебираем целевую папку
     for file in os.listdir(args.folder):     for file in os.listdir(args.folder):
         currentHash= GetHash(args.folder +'/'+ file)         currentHash= GetHash(args.folder +'/'+ file)
         print(file +' - '+ currentHash)         print(file +' - '+ currentHash)
- 
  
 def GetHash(fullFileName): def GetHash(fullFileName):
Строка 689: Строка 675:
             break                break   
         md5.update(fileData)         md5.update(fileData)
-     
     return md5.hexdigest()     return md5.hexdigest()
- 
  
 if __name__ == "__main__": if __name__ == "__main__":
Строка 700: Строка 684:
  
  
- +===== Работа с оболочкой =====
-==== Работа с оболочкой === +
 <details> <details>
 <summary>:!: Пару вариантов </summary> <summary>:!: Пару вариантов </summary>
Строка 712: Строка 694:
 print(var.stdout) print(var.stdout)
 </code> </code>
- 
 Вывод сразу на консоль, возвращает код возврата\\ Вывод сразу на консоль, возвращает код возврата\\
 <code python> <code python>
 import os import os
- 
 os.system("ls /home/admin >/dev/null") os.system("ls /home/admin >/dev/null")
 </code> </code>
Строка 723: Строка 703:
  
  
-==== Цвет текста === +===== Цвет текста =====
 <details> <details>
 <summary>:!: ANSI последовательности, работает для *nix консолей </summary> <summary>:!: ANSI последовательности, работает для *nix консолей </summary>
Строка 739: Строка 718:
     BOLD = '\033[1m'     BOLD = '\033[1m'
     UNDERLINE = '\033[4m'     UNDERLINE = '\033[4m'
-     
 print(bcolors.HEADER+ 'This is test TeXt in color'+ bcolors.ENDC) print(bcolors.HEADER+ 'This is test TeXt in color'+ bcolors.ENDC)
 print(bcolors.OKBLUE+ 'This is test TeXt in color'+ bcolors.ENDC) print(bcolors.OKBLUE+ 'This is test TeXt in color'+ bcolors.ENDC)
Строка 756: Строка 734:
 <code python> <code python>
 #!/usr/bin/python #!/usr/bin/python
- 
 import subprocess, os import subprocess, os
- 
- 
 glNameNewImport= "" glNameNewImport= ""
 glSelectedMultip= "" glSelectedMultip= ""
Строка 775: Строка 750:
     BOLD = '\033[1m'     BOLD = '\033[1m'
     UNDERLINE = '\033[4m'     UNDERLINE = '\033[4m'
- 
  
 def main(): def main():
Строка 817: Строка 791:
     # -= Создаем копированием новый импорт, пишем ему параметры =-     # -= Создаем копированием новый импорт, пишем ему параметры =-
     createNewImport()     createNewImport()
- 
  
     print("""\n\033[92mНовый импорт успешно создан!\033[0m     print("""\n\033[92mНовый импорт успешно создан!\033[0m
Строка 829: Строка 802:
     Общая конфигурация всех импортов: \033[92m'/tank/BIN/MgaImport/app.conf'\033[0m     Общая конфигурация всех импортов: \033[92m'/tank/BIN/MgaImport/app.conf'\033[0m
     Файл мультипликатор: \033[92m'/tank/BIN/FileMultiplicators/"""+ glSelectedMultip+"""'\033[0m     Файл мультипликатор: \033[92m'/tank/BIN/FileMultiplicators/"""+ glSelectedMultip+"""'\033[0m
- 
 Укажите \033[96mпараметры импорта в БД\033[0m в файле конфигурации импорта Укажите \033[96mпараметры импорта в БД\033[0m в файле конфигурации импорта
 Используя Jmx-порт, создайте самостоятельно \033[96mмониторинг в Zabbix\033[0m, при необходимости\n""") Используя Jmx-порт, создайте самостоятельно \033[96mмониторинг в Zabbix\033[0m, при необходимости\n""")
- 
- 
  
 def getNameNewImport(): def getNameNewImport():
Строка 850: Строка 820:
         print(bcolors.FAIL+ "Импорт с таким именем уже существует"+ bcolors.ENDC)         print(bcolors.FAIL+ "Импорт с таким именем уже существует"+ bcolors.ENDC)
         exit(1)         exit(1)
- 
- 
  
 def createNewImport(): def createNewImport():
Строка 886: Строка 854:
     multipConfig.write(Configuration)     multipConfig.write(Configuration)
     multipConfig.close()     multipConfig.close()
- 
  
     # Делаем запись о новом мультипе в общем конфиге     # Делаем запись о новом мультипе в общем конфиге
Строка 925: Строка 892:
     configFile.write(newText)     configFile.write(newText)
     configFile.close()     configFile.close()
- 
- 
  
 def getHostIP(): def getHostIP():
Строка 971: Строка 936:
         Параметры дефолтные (для импортов)         Параметры дефолтные (для импортов)
     """     """
-     
     # Добавляем запись о новой шаре в конфиг самбы      # Добавляем запись о новой шаре в конфиг самбы 
     newText= """\n["""+fullPath.split('/')[-1] +"""]     newText= """\n["""+fullPath.split('/')[-1] +"""]
Строка 1048: Строка 1012:
     configFile.write(newText)     configFile.write(newText)
     configFile.close()     configFile.close()
- 
- 
  
 def useExistMultip(): def useExistMultip():
Строка 1069: Строка 1031:
     os.system('/bin/bash /tank/BIN/FileMultiplicators/'+glSelectedMultip +'/restart.sh')     os.system('/bin/bash /tank/BIN/FileMultiplicators/'+glSelectedMultip +'/restart.sh')
     os.system('/bin/bash /tank/BIN/FileMultiplicators/'+glSelectedMultip +'/status.sh')     os.system('/bin/bash /tank/BIN/FileMultiplicators/'+glSelectedMultip +'/status.sh')
- 
- 
  
 def SelectMultipl(): def SelectMultipl():
Строка 1116: Строка 1076:
             exit(1)             exit(1)
         return 1         return 1
- 
- 
  
 def CreateFolder(fullPath): def CreateFolder(fullPath):
Строка 1126: Строка 1084:
         if input("\nОшибка при создании директории, можете создать вручную. Важно задать доступ пользователю mgaimport\nПродолжить скрипт? ")!= 'y':         if input("\nОшибка при создании директории, можете создать вручную. Важно задать доступ пользователю mgaimport\nПродолжить скрипт? ")!= 'y':
             exit(1)             exit(1)
- 
- 
  
 def GetFreePorts(): def GetFreePorts():
Строка 1152: Строка 1108:
     glDictFreePorts['ImportJmxPort']= FindFreePort(ImportJmxPorts, 10050)     glDictFreePorts['ImportJmxPort']= FindFreePort(ImportJmxPorts, 10050)
          
- 
- 
 def FindFreePort(listExistPorts, defaultNewPort): def FindFreePort(listExistPorts, defaultNewPort):
     """ Ищем новый свободный порт.     """ Ищем новый свободный порт.
Строка 1165: Строка 1119:
         return str(int(listExistPorts[0])+ 1)         return str(int(listExistPorts[0])+ 1)
  
 +if __name__ == "__main__":
 +    main()
 +</code>
 +</details>
  
  
  
-if __name__ == "__main__"+===== Кодировка ===== 
-    main()+[[https://chase-seibert.github.io/blog/2014/01/12/python-unicode-console-output.html|На счет вывода]]\\ 
 + 
 +<details> 
 +<summary>:!: Кодировка</summary> 
 +<code python> 
 +  # При открытии файла 
 +with open(my_file, 'r', encoding="utf-8"as raw_input_log: 
 +... 
 + 
 +  # Так же проблема может возникнуть при записи в консоль 
 +# Ошибка "UnicodeEncodeError: 'ascii' codec can't encode character" 
 +# Смысл в том что python путает какую кодировку принимает консоль, нужно установить ее явно 
 +# можно установить через переменную окружения, напирмер перед запуском скрипта 
 +set PYTHONIOENCODING=UTF-8 & python make_backup.py 
 </code> </code>
 </details> </details>
  
  
-====  ====+ 
 +===== Ошибка при отсутствии lxml ===== 
 +Была трабла при ее установке, как вариант эти пару команд\\ 
 +<code bash> 
 +yum install python-devel 
 +pip3 install -U pip setuptools 
 +python3 -m pip install lxml 
 +</code> 
 + 
 + 
 + 
 +===== Ошибка при отсутствии lxml =====
  
 <details> <details>
Строка 1182: Строка 1165:
 </code> </code>
 </details> </details>
- 
  
develop/pyton/sqlite.1660463761.txt.gz · Последнее изменение: 2022/08/14 07:56 — admin