Как сделать так, чтобы программа на python автоматически перезапускала себя? Итак, скажем, есть действительно простая программа, такая как:
var = input(«Hi! I like cheese! Do you like cheese?»).lower() if var == «yes»: print(«That’s awesome!»)
Теперь в оболочке Python вам нужно будет нажать либо кнопку «Выполнить», а затем «Запуск модуля (F5)», либо просто кнопку «f5» на клавиатуре. Это первый раз, когда вы запускаете его. Когда программа закончилась, вы вернетесь к своему файлу «Cheese.py» и затем нажмите «f5», чтобы снова запустить программу. Все со мной здесь?
Итак, мой вопрос: как заставить программу автоматически перезагружаться без необходимости делать это вручную?
DavidEclipse 15 Мар 2016 в 20:42
4 ответа
Лучший ответ
Это зависит от того, что вы подразумеваете под «перезагрузить себя». Если вы просто хотите непрерывно выполнять один и тот же код, вы можете заключить его в функцию, а затем вызвать его из цикла while True , например:
PyCharm не запускается код
>>> def like_cheese(): . var = input(«Hi! I like cheese! Do you like cheese?»).lower() # Corrected the call to `.lower`. . if var == «yes»: . print(«That’s awesome!») . >>> while True: . like_cheese() . Hi! I like cheese! Do you like cheese?yes That’s awesome!
Hi! I like cheese! Do you like cheese?yes That’s awesome!
Если вы хотите фактически перезапустить сценарий, вы можете выполнить сценарий снова, заменив текущий процесс новым, выполнив следующие действия:
#! /bin/env python3 import os import sys def like_cheese(): var = input(«Hi! I like cheese! Do you like cheese?»).lower() if var == «yes»: print(«That’s awesome!») if __name__ == ‘__main__’: like_cheese() os.execv(__file__, sys.argv) # Run a new iteration of the current script, providing any command line args from the current iteration.
Это будет постоянно перезапускать скрипт, предоставляя аргументы командной строки от текущей версии к новой версии.
Более подробное обсуждение этого метода можно найти в посте «Перезапуск скрипта Python внутри себя »от Петр Земек.
эта статья отмечает один элемент является:
Если вы используете вышеуказанное решение, имейте в виду, что exec*() функции вызывают немедленную замену текущего процесса, без очистки открытых файловых объектов. Поэтому, если у вас есть открытые файлы во время перезапуска скрипта, вы должны очистить они используют f.flush() или os.fsync(fd) перед вызовом exec*() функция .
Doug R. 1 Фев 2018 в 14:12
Или вы можете попробовать
$ chmod a+x «name».py
Затем вы можете запустить скрипт через
$ ./daemon.py
В такой ситуации, чтобы перезапустить скрипт, используйте следующий код:
os.execv(__file__, sys.argv)
В противном случае, когда вы запускаете скрипт через
$ python daemon.py
Используйте этот код:
os.execv(sys.executable, [‘python’] + sys.argv)
В любом случае, не забудьте импортировать sys module
L_J 14 Июл 2018 в 17:03
Я использую терминал на своем Mac, чтобы перезапустить некоторые из моих скриптов на Python с помощью функции ниже.
import subprocess def run_again(cmd): subprocess.call([«bash», «-c», «source ~/.profile; » + cmd])
Примечание: не забывайте пробел после «профиля»; или функция может молча сбоить!
Затем в нижней части моего сценария нужно перезапустить:
if some_condition: run_again(«python my_script.py %s» % my_new_arguments)
Исходный вопрос о сценарии с сыром:
if var != ‘yes’: run_again(«python my_cheese_script.py»)
exbctel 13 Окт 2017 в 18:50
Вы можете заключить что-то в while True: , чтобы оно выполнялось повторно, поскольку True всегда будет иметь значение True , например так:
while True: var = input(«Hi! I like cheese! Do you like cheese?»).lower() #
Есть еще одна проблема с вашим кодом, хотя; Вы не вызвали lower , поставив после него круглые скобки.
Источник: question-it.com
PYTHON ПЕРЕЗАПУСК СКРИПТА
Когда мы создаем скрипты на Python, возникает необходимость перезапуска программы для применения изменений. Для этого существует несколько способов.
Первый способ — перезапуск скрипта из командной строки. Для этого необходимо закрыть окно программы, затем ввести команду python имя_скрипта.py . При этом программа перезапустится.
Второй способ — использование особого модуля os в Python. Нам необходимо импортировать этот модуль и использовать команду os.execv(__file__, sys.argv) . Эта команда перезапустит текущий скрипт. Пример кода:
import os
import sys
def restart_program():
python = sys.executable
os.execl(python, python, * sys.argv)
if __name__ == «__main__»:
restart_program()
Третий способ — использование библиотеки watchdog . Она позволяет отслеживать изменения в файлах и автоматически перезапускать скрипт при обнаружении изменений. Пример кода:
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
def on_any_event(self, event):
os.system(«python скрипт.py»)
observer = Observer()
observer.schedule(Handler(), path=’.’, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Передача параметров в скрипт Python
Планирование и автозапуск Python скриптов по времени
Автозапуск программ на python
Python в .EXE ► КАК?
Как разгадывать капчу автоматически при парсинге
Як запустити #python скрипт на #windows
Новые материалы:
- Книга программирование на python для начинающих скачать бесплатно
- Как удалить переменную в python
- Получить сертификат python
- Python транспонирование матрицы zip
- Кириллица в python
- Pdf python скачать
- Основы искусственного интеллекта в примерах на python
- Описательная статистика в python
- Из csv в xml python
- Четные индексы python
Источник: pygame.ru
Как сделать программу Python автоматически перезапустить себя
Как заставить программу python автоматически перезапускать себя? Итак, скажем, есть действительно простая программа, например:
var = input(«Hi! I like cheese! Do you like cheese?»).lower() if var == «yes»: print(«That awesome!»)
Теперь в оболочке Python вам нужно нажать кнопку «Запустить», а затем «Запустить модуль (F5)» или просто кнопку «f5» на клавиатуре. Это первый раз, когда вы его запускаете. Когда программа закончится, вы вернетесь в свой файл «Cheese.py», а затем нажмите «f5», чтобы снова запустить программу.
Все со мной здесь? Хорошо, так что мой вопрос: как заставить программу автоматически перезагрузиться автоматически, без необходимости вручную ее выполнять?
DavidEclipse 15 март 2016, в 19:27
Поделиться
Вы имеете в виду, что вы просто хотите зациклить программу, или перезагрузить ее, или . что? Какую реальную проблему вы пытаетесь решить.
jonrsharpe 15 март 2016, в 17:45
morxa 15 март 2016, в 17:48
Поделиться:
4 ответа
Лучший ответ
Это зависит от того, что вы подразумеваете под «перезагрузкой». Если вы просто хотите постоянно выполнять один и тот же код, вы можете обернуть его в функцию, а затем вызвать его изнутри. while True loop, например:
>>> def like_cheese(): . var = input(«Hi! I like cheese! Do you like cheese?»).lower() # Corrected the call to ‘.lower’. . if var == «yes»: . print(«That awesome!») . >>> while True: . like_cheese() . Hi! I like cheese! Do you like cheese?yes That awesome! Hi! I like cheese!
Do you like cheese?yes That awesome!
Если вы действительно хотите перезапустить скрипт, который вы можете запустить скрипт снова, заменив текущий процесс на новый, выполнив следующие действия:
#! /bin/env python3 import os import sys def like_cheese(): var = input(«Hi! I like cheese! Do you like cheese?»).lower() if var == «yes»: print(«That awesome!») if __name__ == ‘__main__’: like_cheese() os.execv(__file__, sys.argv) # Run a new iteration of the current script, providing any command line args from the current iteration.
Это приведет к повторному запуску сценария, предоставив аргументы командной строки из текущей версии в новую версию.
Более подробное обсуждение этого метода можно найти в статье » Перезапуск скрипта Python внутри себя » Петра Земек.
Один из пунктов, который эта статья отмечает:
Если вы используете вышеупомянутое решение, помните, что функции exec*() немедленно заменяют текущий процесс, не очищая открытые файловые объекты. Поэтому, если у вас есть какие-либо открытые файлы во время перезапуска скрипта, вы должны очистить их с помощью f.flush() или os.fsync(fd) перед вызовом функции exec*() .
Источник: overcoder.net