• Как прекратить ввод значений по нажатии CTRL?

    shabelski89
    @shabelski89
    engineer
    import signal
    import time
    
    
    class SigHandler:
        stop = False
    
        def __init__(self):
            signal.signal(signal.SIGINT, self.exit)
            signal.signal(signal.SIGTERM, self.exit)
    
        def exit(self, *args):
            print(signal.strsignal(args[0]))
            self.stop = True
    
    
    if __name__ == '__main__':
        Array = []
    
        signal_handler = SigHandler()
        while not signal_handler.stop:
            Array += input('Input value: ')
            print(Array)
            time.sleep(0.5)
    
        print("Exit")
    Ответ написан
    Комментировать
  • Как указать относительный путь к файлу через внешнюю папку?

    shabelski89
    @shabelski89
    engineer
    >>> import os
    >>> c = os.getcwd()
    >>> c
    'C:\\Users\\ashab'
    >>> d = os.path.split(c)
    >>> d
    ('C:\\Users', 'ashab')
    >>> test_folder = r'C:\Program Files\Common Files\Adobe'
    >>> d_test_folder = os.path.split(test_folder)
    >>> d_test_folder
    ('C:\\Program Files\\Common Files', 'Adobe')
    >>> d_test_folder[0]
    'C:\\Program Files\\Common Files'
    >>>
    Ответ написан
    Комментировать
  • Почему Telegram Bot неполностью форматирует текст?

    shabelski89
    @shabelski89
    engineer
    Sending large text messages

    Sometimes you must send messages that exceed 5000 characters. The Telegram API can not handle that many characters in one request, so we need to split the message in multiples. Here is how to do that using the API:

    from telebot import util
    large_text = open("large_text.txt", "rb").read()
    
    # Split the text each 3000 characters.
    # split_string returns a list with the splitted text.
    splitted_text = util.split_string(large_text, 3000)
    
    for text in splitted_text:
    	tb.send_message(chat_id, text)
    Ответ написан
    Комментировать
  • Как принять поступающий POST запрос на мой сервер?

    shabelski89
    @shabelski89
    engineer
    Самое простое например свой веб на flask
    from flask import Flask
    from flask import request
    
    app = Flask(__name__)
    
    @app.route('/url/', methods = ['GET', 'POST'])
    def handle_request():
        if request.method == 'POST':
            data = request.form
    Ответ написан
    Комментировать
  • Ошибка в tkinker, при нажатии на кнопку, как исправить?

    shabelski89
    @shabelski89
    engineer
    внутри функции save вы её вызываете ещё раз -зачем? и откуда берется link1 тоже не ясно
    def save(link):
        filename = link.split('/')[-1]
        print (filename)
        r = requests.get(link)
        open(filename, 'wb').write(r.content)
        #save(link1) # убираем это
        save_1 = tk.Label(win, text='Desktop cкачан в текущую папку', bg='#CCC', font=('Arial',10))
        save_1.pack()
        save_1.place(x=15, y=200)

    что там про чек-бокс не понятно, нужен полный код программы
    Ответ написан
    6 комментариев
  • В чем заключается ошибка, Python Aiogram?

    shabelski89
    @shabelski89
    engineer
    В трейсе ошибки же написано :
    TypeError: a bytes-like object is required, not '_io.BytesIO'

    new_file.write(dowloaded_file_photo.read())
    или
    new_file.write(dowloaded_file_photo.getvalue())
    Ответ написан
    Комментировать
  • Как узнать количество секций в config.ini заданных пользователем?

    shabelski89
    @shabelski89
    engineer
    Я думаю можно как-то так.
    1) Циклы
    2) Классы
    3) Выполнение и перехват процессов ОС
    4) форматирование вывода - тут ещё нужно подумать над выравниванием

    to do
    1) сейчас реализован разовый запуск и проверка по списку, в идеале чтобы висел непрерывно

    from configparser import ConfigParser
    from enum import IntEnum
    import subprocess
    from datetime import datetime
    import colorama
    from colorama import Fore, Style
    
    
    class Status(IntEnum):
        UP = 1
        DOWN = 2
    
    
    class PingStatus(IntEnum):
        success = 0
        failed = 2
    
    
    class Camera:
        def __init__(self, pos: int, name: str, area: str, ip: str, mac: str):
            self.pos = pos
            self.name = name
            self.area = area
            self.ip = ip
            self.mac = mac
            self.status = None
            self.dt = None
    
        def __repr__(self):
            return "|".join([str(x).ljust(15) for x in vars(self).values()])
    
        def check_status(self):
            result = subprocess.call('ping %s -n 2' % self.ip, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)
            if result == PingStatus.success:
                self.status = "\033[4m\033[37m\033[42m{}\033[0m".format(Status.UP.name)
            elif result == PingStatus.failed:
                self.status = "\033[4m\033[37m\033[41m{}\033[0m".format(Status.DOWN.name)
            else:
                self.status = "\033[4m\033[37m\033[41m{}\033[0m".format(Status.DOWN.name)
            self.dt = datetime.now().strftime("%Y.%m.%d %H:%M")
    
    
    if __name__ == "__main__":
        colorama.init()
        print(Fore.YELLOW + 'IP CCTV monitoring system')
        print(Style.RESET_ALL)
        config = ConfigParser()
        config.read('config.ini')
        cams = {config[x]['name']: Camera(pos=int(config[x]['pos']), name=config[x]['name'], area=config[x]['area'],
                                          mac=config[x]['mac'], ip=config[x]['Ip'])
                for x in config.sections() if x.startswith('cam')}
    
        for cam in cams.values():
            cam.check_status()
            print(cam)
    Ответ написан
    1 комментарий
  • Запрос MySql. Как составить выборку из первой таблицы по нескольким параметрам из второй?

    shabelski89
    @shabelski89
    engineer
    То что Вы хотите в представлении нужно фильтровать по OR (или IN) и добавлять фильтр по fruit.
    SELECT  
    FT.ID as ID_fruit, FT.fruit as FT_fruit, PT.ID_Param as D_Param 
    FROM Frut_table FT 
    LEFT JOIN Param_Table PT ON FT.ID = PT.ID_fruit
    WHERE PT.ID_Param IN (10, 20) AND FT.ID IN (1, 3)
    Ответ написан
  • Как получать "чистое" значение ячейки в Google Sheets?

    shabelski89
    @shabelski89
    engineer
    Вам нужно просто извлечь значение из JSON. если посмотреть внимательно то перед вами словарь, и нужный элемент получается по ключу.
    А то что Вы делаете описано подробно тут
    ну и в качестве домашнего задания разберитесь по строчкам кода
    response = {'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['102126989']]}
    response.get('values', 'No key values')
    [['102126989']]
    result = response.get('values', 'No key values')
    type(result)
    <class 'list'>
    result[0]
    ['102126989']
    result[0][0]
    '102126989'
    values = result[0][0]
    values
    '102126989'
    v = response['values'][0][0]
    v
    '102126989'
    import json
    from_google_sheet = '[{"majorDimension": "COLUMNS", "range": "guid!B2", "values": [["1"]]},{"majorDimension": "COLUMNS", "range": "guid!B2", "values": [["2"]]},{"majorDimension": "COLUMNS", "range": "guid!B2", "values": [["3"]]}]'
    json_from_google_sheet = json.loads(from_google_sheet)
    json_from_google_sheet
    [{'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['1']]}, {'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['2']]}, {'majorDimension': 'COLUMNS', 'range': 'guid!B2', 'values': [['3']]}]
    type(json_from_google_sheet)
    <class 'list'>
    for values in json_from_google_sheet:
        print(values['values'][0][0])
        
    1
    2
    3
    Ответ написан
    Комментировать
  • Задержка для парсера сайта?

    shabelski89
    @shabelski89
    engineer
    есть вероятность что это JS даёт задержку , вот тут предлагаю элегантное решение

    from bs4 import BeautifulSoup
    from selenium import webdriver
    
    url = "http://legendas.tv/busca/walking%20dead%20s03e02"
    browser = webdriver.PhantomJS()
    browser.get(url)
    html = browser.page_source
    soup = BeautifulSoup(html, 'lxml')
    a = soup.find('section', 'wrapper')
    Ответ написан
    Комментировать
  • Как передать большой файл через сокеты на Python?

    shabelski89
    @shabelski89
    engineer
    Ответ написан
    Комментировать
  • Почему не работает print?

    shabelski89
    @shabelski89
    engineer
    не работает из-за непонимания того что Вы пытаетесь сделать.
    def talk():
      myEmi = input("")  # 1 присваиваем переменной myEmi значение введенное в input (это должно быть имя файла?) а кажется что сюда хотели вводить слово которое нужно искать в файле
      with open(f"BD1/{myEmi}.txt",  "r") as file:  # 2 открытие файла на чтение с именем из п.1
        if file.read() == myEmi:  # 3 file.read() читает содержимое file и возвращает содержимое ввиде строки, а дальше вы сравниваете с введенным словом, которое же почему и в имени файла?! Нужно использовать оператор IN вместо ==, а ещё правильнее прочитать файл так result = file.readlines() , что вернёт список строк и потом уже искать в списке элемент.
          print("Это слово есть!")
          talk()
        else:
          with open(f"BD1/{myEmi}.txt",  "w") as file:
            file.write(myEmi)
            talk()
    talk()   # 0 вызов функции talk()
    Ответ написан
    Комментировать
  • Как на питоне проверять статус платежа каждые 5 минут в telegram боте?

    shabelski89
    @shabelski89
    engineer
    Самое простое запустить функцию проверки в отдельном потоке. Примеры потоков тут.
    Ответ написан
    Комментировать
  • Зачем в python 3 функция format у строк?

    shabelski89
    @shabelski89
    engineer
    f нотация, появилась в питоне 3.6, в более ранних версиях был .format . Функицонально различий нет, есть различие в читаемости и лаконичности, я использую f нотацию.
    Ответ написан
    Комментировать
  • Как считать байт код файла?

    shabelski89
    @shabelski89
    engineer
    Зачем?
    Чтобы считать байт-код файла, его нужно скопилировать.
    пример питон файла
    root@vs1:~/project/test_nuitka# cat test_program.py
    def test():
        print('passed')
    
    if __name__ == "__main__":
        test()

    пример компиляции
    root@vs1:~/project/test_nuitka# python3
    Python 3.7.3 (default, Jan 22 2021, 20:04:44)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import py_compile
    >>> import os
    >>> os.listdir()
    ['include', 'share', 'test_program.py', 'lib64', 'bin', 'pyvenv.cfg', 'lib', 'ping.py']
    >>> py_compile.compile('test_program.py')
    '__pycache__/test_program.cpython-37.pyc'


    полученынй файл перемещаем куда угодно с помощью shutil.

    это если под байт-кодом понималось именно это, а ваш код показывает что нужно просто переместить файл с помощью shutil, вот примеры.
    Ответ написан
    Комментировать
  • Что не так со списком в python?

    shabelski89
    @shabelski89
    engineer
    1e - если используете with, то не нужно закрывать файл явно, при выходе из блока with сам это сделает.
    2е - метод read() возврщает строку, то есть answers - строка, убедиться можно сделав
    print(type(answer))
    уверен что answer[0] - это пробел
    3е - чтобы получить список, нужно вместо read() использовать readlines()
    Ответ написан
    1 комментарий
  • Очиститель файла после знака?

    shabelski89
    @shabelski89
    engineer
    class FileHandler:
        def __init__(self, filename):
            self.filename = filename
    
        def read(self):
            with open(self.filename, 'r', encoding='utf-8') as in_file, \
                    open(f'result_{self.filename}', 'w', encoding='utf-8') as out_file:
                for line in in_file:
                    if line:
                        out_line = self.__parse(line)
                        out_file.write(out_line)
                        out_file.write("\n")
    
        @staticmethod
        def __parse(line):
            result, *_ = line.split(":")
            return result
    
    
    if __name__ == "__main__":
        f = FileHandler(r'yot_file_name')
        f.read()
    Ответ написан
    Комментировать
  • Как записать текст в yaml файл в python?

    shabelski89
    @shabelski89
    engineer
    Ваш костыль не нужен освсем, есть готовые библиотеки - yaml
    Ваши данные должны быть списками и словарями питона, которые дампятся в yaml файл.
    Ответ написан
    Комментировать
  • Как правильно прочитать файл с сохранением типов данных?

    shabelski89
    @shabelski89
    engineer
    не нужно ничего писать, нужно файл с данными сохранять в валидный JSON.
    например:
    {"0": [1,2,3]}
    читаем
    import json
    
    with open('some_file.txt') as jfile:
        data = json.load(jfile)
        
    data
    {'0': [2, 4, 5]}
    data['0']
    [2, 4, 5]
    data['0'][0]
    2
    type(data['0'][0])
    <class 'int'>
    Ответ написан
    Комментировать