Как сделать чтобы программа постоянно работала питон

Описание проблемы: Через консоль запускаем python-скрипт, но как только отключаемся от сервера — скрипт перестаёт работать. Пробовали запустить с помощью screen (модуль, который создаёт параллельные рабочие столы), однако в случае падения скрипта модуль не перезапускается автоматически.

Решение: Использовать модуль systemd.

Как запустить Python-скрипт на постоянку при помощи systemd

Установим на сервере данный модуль:

apt-get install systemd

На компьютере создадим файл с расширением .service. В моём случае я создаю файл для запуска скрипта Телеграмм-бота, потому называю файл icopydoc-bot.service и наполняю его следующим образом:

[Unit] Description=Telegram bot ‘iCopyDoc Bot’ After=syslog.target After=network.target [Service] Type=simple User=root WorkingDirectory=/var/www/html/bot ExecStart=/usr/bin/python3 /var/www/html/bot/index.py RestartSec=10 Restart=always [Install] WantedBy=multi-user.target

Обратите внимание на правила WorkingDirectory и ExecStart. В первом мы указываем путь до папки, в которой лежат файлы проекта с ботом, а во втором прописываем путь до основного файла нашего проекта.

Шуточное приложение с убегающей кнопкой «Да» на python (питон) tkinter

Теперь нам надо закачать данный файл в /etc/systemd/system. Я делал это через FTP (подробнее о настройке FTP на Апаче).

Загружаем файл .service для systemd

Но вы можете воспользоваться консолью, заменив мои данные на ваши:

Далее выполняем следующие команды в консоли:

systemctl daemon-reload systemctl enable icopydoc-bot systemctl start icopydoc-bot systemctl status icopydoc-bot

Готово! Теперь скрипт будет работать в фоновом режиме даже если вы отключитесь от сервера.

Источник: icopydoc.ru

Как запустить программу на Python в фоновом режиме?

Пишу программу, позволяющую засунуть скрин экрана из буфера обмена в папку (в любую). Но не знаю как сделать так чтобы она работала на постоянке в фоновом режиме. Exe делаю в auto-py-to-exe, там же убираю консоль, так что часть с фоновым режимом пусть и криво но реализованна, а вот с постоянной работой есть проблемы. Если я делаю while True, комп немного виснет, по известным причинам, если же я его убираю, то программа проходит один раз и выключается. Как сделать так, чтобы программа работала постоянно, без while True?
Сам скрипт максимально прост и короток, подозреваю что и решение тоже.

Читайте также:
Программа для определения кто рядом

from keyboard import is_pressed from shutil import copy from easygui import diropenbox from PIL import ImageGrab from os import getcwd while True: if is_pressed(‘Ctrl + Shift + v’): #Проверяет нажато ли сочетание клавиш folder = getcwd() #Получает директорию в которой находится скрипт im = ImageGrab.grabclipboard() #Сохраняет изображение из буфера обмена в переменную im im.save(‘somefile.png’, ‘PNG’) #Сохраняет переменную im в формате png в папке со скриптом с именем somefile.png folder2 = diropenbox() #Выводит диалоговое окно для выбора папки copy(folder + «somefile.png», folder2) #Копирует файл somefile.png в выбранную папку

Уроки Python / Запуск внешних приложений


630f69ed3cadb765663114.png

  • Вопрос задан 31 авг. 2022
  • 239 просмотров

4 комментария

Простой 4 комментария

Источник: qna.habr.com

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Постоянное выполнение скрипта

#1 Июнь 21, 2017 20:12:21

Постоянное выполнение скрипта

Пробую сделать включение/выключение реле на Raspberry Pi по расписанию, написав скрипт на python. Задался вопросом как сделать так, чтобы скрипт не завершался после разового выполнения. Первая мысль — зациклить в while. Сделал — получается безумная нагрузка на проц в 30-40%. Думаю может нужно ставить что-то вроде sleep(1), но это кажется каким-то костылём. Подскажите как правильно делается на python
1) Скрипт, к-й не завершается после разового выполнения (и при этом не грузит проц)
2) GUI для скрипта (попадалась информация, что цикл while будет “как-то” мешать работе GUI). Думаю попробовать PyQt или TkInter.

#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys # import logging # Подключить папку с модулями sys.path.append(os.path.dirname(__file__)+’modules’) # import GUI from Garden import * try: # Инициализации входов и запуск x = Garden() x.start() while True: x.watch() except Exception, e: raise e
#!/usr/bin/env python # -*- coding: utf-8 -*- import json import RPi.GPIO as GPIO from pprint import pprint from time import gmtime, strftime class Garden: settings_file=’settings.json’ settings = [] def __init__(self): # Считать настройки из файла settings = self.readSettings(self.settings_file) self.setSettings(settings) def __del__(self): GPIO.cleanup() def start(self): print(«Starting. «) self.initGPIO() return def initGPIO(self): # Установить нумерацию GPIO GPIO.setmode(getattr(GPIO,self.settings[‘GPIO’][‘mode’])) # Установить режимы работы каналов for t,ch in self.settings[‘GPIO’][‘channels’].items(): GPIO.setup(ch, getattr(GPIO,t) ) # print(«Initializing GPIO») return def readSettings(self,settings_file): «»»Считать настройки из файла или взять дефолтные значения»»» with open(settings_file) as file: data = json.load(file) return data def setSettings(self,settings): «»»Установить настройки»»» if not settings: return False self.settings = settings return True def setOut(self,ch,v): «»»Включить/выключить выхода»»» GPIO.output(ch, v) def getTime(self): «»»Получить текущее время»»» return strftime(«%d.%m.%Y %H:%M», gmtime()) def watch(self): «»»Сверять время»»» t = self.getTime() # Сверка времени. Хардкод if t == ‘20.06.2017 12:01’: self.setOut(11,1) print(«Включить выход») else: self.setOut(11,0) print(«Выключить выход»)

Читайте также:
Kali linux установить программу

Источник: python.su

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru