Как сделать перезапуск программы python
Как сделать программу Python автоматически перезапустить себя
Как сделать так, чтобы программа на python автоматически перезапускала себя? Итак, скажем, есть действительно простая программа, такая как:
Теперь в оболочке Python вам нужно будет нажать либо кнопку «Выполнить», а затем «Запуск модуля (F5)», либо просто кнопку «f5» на клавиатуре. Это первый раз, когда вы запускаете его. Когда программа закончилась, вы вернетесь к своему файлу «Cheese.py» и затем нажмите «f5», чтобы снова запустить программу. Все со мной здесь? Итак, мой вопрос: как заставить программу автоматически перезагружаться без необходимости делать это вручную?
4 ответа
Если вы хотите фактически перезапустить сценарий, вы можете выполнить сценарий снова, заменив текущий процесс новым, выполнив следующие действия:
Это будет постоянно перезапускать скрипт, предоставляя аргументы командной строки от текущей версии к новой версии. Более подробное обсуждение этого метода можно найти в посте «Перезапуск скрипта Python внутри себя »от Петр Земек.
эта статья отмечает один элемент является:
Или вы можете попробовать
Затем вы можете запустить скрипт через
В такой ситуации, чтобы перезапустить скрипт, используйте следующий код:
В противном случае, когда вы запускаете скрипт через
Используйте этот код:
В любом случае, не забудьте импортировать sys module
Я использую терминал на своем Mac, чтобы перезапустить некоторые из моих скриптов на Python с помощью функции ниже.
Примечание: не забывайте пробел после «профиля»; или функция может молча сбоить!
Затем в нижней части моего сценария нужно перезапустить:
Исходный вопрос о сценарии с сыром:
Restart python-script from within itself
I have a python-based GTK application that loads several modules. It is run from the (linux) terminal like so:
From within the program the user can download (using Git) newer versions. If such exists/are downloaded, a button appear that I wish would restart the program with newly compiled contents (including dependencies/imports). Preferably it would also restart it using the contents of sys.argv to keep all the flags as they were.
So what I fail to find/need is a nice restart procedure that kills the current instance of the program and starts a new using the same arguments.
Preferably the solution should work for Windows and Mac as well but it is not essential.
12 Answers 12
You’re looking for os.exec*() family of commands.
To restart your current program with exact the same command line arguments as it was originally run, you could use the following:
I think this is a more elaborate answer, as sometimes you may end up with too many open file objects and descriptors, that can cause memory issues or concurrent connections to a network device.
And i have server.py where i need to restart the application itself, so i had:
but that did not restart the application itself by following runme.sh, so when i used this way:
Then i was able to restart itself
I know this solution isn’t technically what you are asking for but if you want to be 100% sure you freed everything or don’t want to rely on dependencies you could just run the script in from a loop in another:
Then you can restart main.py as simply as:
For me this part worked like a charm:
Works at Windows (Without args)
I have just a little amelioration on the code of #s3niOr.
In my case there are spaces in the path of the python file. So by adding a proper formatting, the problem can be solved.
Notice that in my case my python file has no other arguments. So if you do have other arguments, you have to deal with them.
This solves the problem of restarting a python script that has spaces in its path :
I was looking for a solution to this and found nothing that works on any of the stack overflow posts. Maybe some of the answers are too out of date, e.g. os.system has been replaced by subprocess. I am on linux lubuntu 17.10, using python 3.
Two methods worked for me. Both open a new shell window and run the main.py script in it and then close the old one.
Adapted from @YumYumYum method. I did not need the kill option, (though it did not kill my python process by name anyway and I had to use killall python3 to achieve it when testing).
I use lxterminal but you could probably use any.
In the file called restart.sh (chmod +x to make it executable)
Then in the main.py use this when you need to call it
2. From within main.py
Adapted from @Stuffe method. This one is internal to the main.py script and opens a new shell window then runs the new script, then quits out of the old script. I am not sure it needs the time.sleep delay but I used it anyway.
Inspired by @YumYumYum and fixed the problem Using restart.sh and os.execl
Add this to your main.py
I’m using this to give an option for the users to restart the script within the console. Hope it could be a help.
So the user can input an option ‘Y/N’ to restart the program or not.
The old answers utilize exec which is fine, but not scalable in the long run. There’s also an approach of master/slave process relationship or a daemon/service in the background which will watch for the changes but is mostly OS specific or even different between the same family of OSs (init.d vs systemd vs whatever).
There’s also a middle ground by using a bootstraping technique and a simple subprocess.Popen() call thus assuming that the user who started the original program had the permissions to run the executable (such as /usr/bin/python ) should also work without any permission errors due to utilizing the exactly same executable. Bootstraping because it’s the main program that’s creating and calling the restarter a.k.a. pulling itself by own bootstraps after the initial start.
So a simple program (re)starter can be written like this, as written in the other answers:
Depending on your needs you might want to do some cleanup afterwards such as removing the (re)starter file.
This allows you to register a function that will execute once your program stops. That function can be anything in Python, so it can write a file too.
Перезапуск программы
Добавлено через 2 часа 37 минут
.
Перезапуск окна программы
Всем здравствуйте, как можно реализовать в PYQT5 перезапуск окна программы при нажатии на кнопку.
Перезапуск индекса при работе с циклом
Всем здравствуйте. Появилась задача написать матрицу, но посмотрев варианты ответа в интернете.
Перезапуск скрипта, после выполнения команды
Здравствуйте, я начинающий кодер, столкнулся с проблемой. Есть один прекрасный модуль uuid, он.
Перезапуск программы
У меня есть бот, который работает круглосуточно, хочу сделать профилактическую автоматическую.
Добавлено через 2 часа 37 минут
.
Перезапуск программы
Как мне программно перезапустить приложение? Нужно чтобы программа перезапустила себя сам, при том.
Перезапуск программы
Уважаемые форумчане, прошу простить меня за не грамотность(только начал изучать языки.
Перезапуск программы
Добрый день! Помогите, пожалуйста. Можно ли сделать так, чтобы при нажатии на кнопку программа.
Перезапуск программы
Доброго времени суток. Подскажите пожалуйста как сделать, чтобы по окончанию программы выходило.
Перезапуск программы
Скажите, пожалуйста, можно ли как-нибудь сделать перезапуск своей программы из нее же самой? Или.
Как сделать перезапуск программы python
Перезапустить программу Python
Я пишу программу Python, которая, если пользователь меняет настройки во время ее запуска, должна быть перезапущена, чтобы применить измененные настройки. Есть ли способ сделать это? Я думаю что-то вроде:
Примечание. Я нахожусь в Windows, если это имеет значение
Я бы обошел всю тоску, от которой вы, вероятно, попадете, чтобы попытаться снова запустить себя и оставить ее в руках окружающей среды.
Под этим я имею в виду:
У вас есть управляющая программа, которая делает не что иное, как запуск вашей программы (с теми же параметрами, которые были заданы) в цикле, когда ваша программа выходит с определенным кодом «перезагрузки». Это может быть так же просто, как файл cmd или сложнее, чем другая (очень простая) программа Python, использующая os.system ). В принципе, до тех пор, пока контрольная программа получает код «перезагрузка», он будет повторно запускать вашу программу с точно такими же параметрами. Любой другой код заставит его выйти с этим кодом.
Если вы хотите полностью выйти, попробуйте запустить свою настоящую программу Python с кодом возврата 0 (или что-либо, что не является кодом перезапуска в ситуации с ошибкой).
Если вы просто хотите перейти на другую итерацию своей программы (например, перечитывать конфигурацию), выйдите с кодом «перезапуска», распознанным управляющей программой.
Но вы также можете подумать о повторной разработке своего приложения, чтобы он мог перечитать его конфигурацию в любое время. Это избавит всю проблему. Вы не упоминаете, почему это не вариант, поэтому я предполагаю, что у вас есть причина, почему это не сработает.
Но, если вы этого не сделаете, то путь, который я бы выбрал.
Чтобы предоставить примерный код для первого параметра (это в Windows, но под Cygwin — те же основные правила должны применяться для Windows Python, но вы должны проверить возвращаемые значения из os.system ).:
Вы можете увидеть контроллер, используя код выхода из 9, чтобы решить, следует ли повторно запускать программу. Сама программа является немой, которая возвращает 9, если она не находится на 10-секундном множестве.
Как сделать перезапуск Python программы?
Я ещё только учу Python. Написал для себя маленькую программу, что-то вроде конвертера валют, только для игры. Через PyInstaller сделал exe программы, но после вывода результата окно сразу закрывается. как сделать, что бы окно не закрывалось и была возможность начать заново, что бы для каждого расчёта не запускать программу по новой?
Самое простое — обернуть всю логику в бесконечный цикл while:
Есть альтернативное решение:
В данном случае оно конечно не будет удобно, но иногда хорошо.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками python или задайте свой вопрос.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.26.40833
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Перезапустите python- script изнутри самого себя
У меня есть приложение GTK на основе python, которое загружает несколько модулей. Он запускается с терминала (linux) следующим образом:
./myscript.py —some-flag setting
Так что я не могу найти/нужна хорошая процедура перезапуска, которая убивает текущий экземпляр программы и запускает новый, используя те же аргументы.
Предпочтительно, решение должно работать и для Windows и Mac, но это не существенно.
ОТВЕТЫ
Ответ 1
Ответ 2
Я думаю, что это более сложный ответ, так как иногда у вас может быть слишком много открытых файловых объектов и дескрипторов, которые могут вызвать проблемы с памятью или параллельные подключения к сетевому устройству.
Ответ 3
UPDATE — из приведенного выше ответа с некоторым примером для дальнейшего использования
но это не перезапустило само приложение, выполнив команду runme.sh, поэтому, когда я использовал этот способ:
Затем я смог перезапустить себя
Ответ 4
Я знаю, что это решение технически не является то, о чем вы просите, но если вы хотите быть на 100% уверенным, что вы освободили все или не хотите полагаться на зависимости, вы можете просто запустить script из цикла в другой:
Затем вы можете перезапустить main.py так же, как:
Ответ 5
Я немного улучшил код # s3niOr.
В моем случае в пути к файлу Python есть пробелы. Таким образом, добавив правильное форматирование, проблема может быть решена.
Обратите внимание, что в моем случае мой файл python не имеет других аргументов. Так что, если у вас есть другие аргументы, вы должны разобраться с ними.
Это решает проблему перезапуска скрипта Python с пробелами в пути:
Ответ 6
Работает на Windows (без аргументов)
Ответ 7
Вдохновлен @YumYumYum и исправил проблему с помощью restart.sh и os.execl
Добавьте это в ваш main.py
Ответ 8
Я использую это, чтобы дать возможность пользователям перезапустить скрипт в консоли. Надеюсь, это поможет.
Таким образом, пользователь может ввести опцию «Y/N», чтобы перезапустить программу или нет.
Python restart program
I made a program that asks you at the end for a restart.
I import os and used os.execl(sys.executable, sys.executable, * sys.argv) but nothing happened, why?
4 Answers 4
sys.executable : python executeable
os.path.abspath(__file__) : the python code file you are running.
*sys.argv : remaining argument
Maybe os.execv will work but why not use directly using os.system(‘python «filename.py»‘) if you have environment and path variable set something like :
Just import the program you want to restart and run it under the desired condition like this Title: hello. py import hello If (enter generic condition here): hello
solved the problem.
Not the answer you’re looking for? Browse other questions tagged python restart python-os or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.12.16.41042
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.