Как сделать перезапуск программы python

Обновлено: 06.07.2024

Я пишу программу Python, которая, если пользователь меняет настройки во время ее запуска, должна быть перезапущена, чтобы применить измененные настройки. Есть ли способ сделать это? Я думаю что-то вроде:

Примечание. Я нахожусь в Windows, если это имеет значение

Я бы обошел всю тоску, от которой вы, вероятно, попадете, чтобы попытаться снова запустить себя и оставить ее в руках окружающей среды.

Под этим я имею в виду:

У вас есть управляющая программа, которая делает не что иное, как запуск вашей программы (с теми же параметрами, которые были заданы) в цикле, когда ваша программа выходит с определенным кодом "перезагрузки". Это может быть так же просто, как файл cmd или сложнее, чем другая (очень простая) программа Python, использующая os.system ). В принципе, до тех пор, пока контрольная программа получает код "перезагрузка", он будет повторно запускать вашу программу с точно такими же параметрами. Любой другой код заставит его выйти с этим кодом.

Если вы хотите полностью выйти, попробуйте запустить свою настоящую программу Python с кодом возврата 0 (или что-либо, что не является кодом перезапуска в ситуации с ошибкой).

Если вы просто хотите перейти на другую итерацию своей программы (например, перечитывать конфигурацию), выйдите с кодом "перезапуска", распознанным управляющей программой.

Но вы также можете подумать о повторной разработке своего приложения, чтобы он мог перечитать его конфигурацию в любое время. Это избавит всю проблему. Вы не упоминаете, почему это не вариант, поэтому я предполагаю, что у вас есть причина, почему это не сработает.

Но, если вы этого не сделаете, то путь, который я бы выбрал.

Чтобы предоставить примерный код для первого параметра (это в Windows, но под Cygwin — те же основные правила должны применяться для Windows Python, но вы должны проверить возвращаемые значения из os.system ).:

Вы можете увидеть контроллер, используя код выхода из 9, чтобы решить, следует ли повторно запускать программу. Сама программа является немой, которая возвращает 9, если она не находится на 10-секундном множестве.

Как сделать перезапуск Python программы?

Я ещё только учу Python. Написал для себя маленькую программу, что-то вроде конвертера валют, только для игры. Через PyInstaller сделал exe программы, но после вывода результата окно сразу закрывается. как сделать, что бы окно не закрывалось и была возможность начать заново, что бы для каждого расчёта не запускать программу по новой?

Самое простое — обернуть всю логику в бесконечный цикл while:

Есть альтернативное решение:

В данном случае оно конечно не будет удобно, но иногда хорошо.


Перезапустите python- script изнутри самого себя

У меня есть приложение GTK на основе python, которое загружает несколько модулей. Он запускается с терминала (linux) следующим образом:

./myscript.py —some-flag setting

Внутри программы пользователь может загрузить (используя Git) новые версии. Если такое существует/загружено, появляется кнопка, которая, как мне хотелось бы, перезапустила бы программу с недавно скомпилированным содержимым (включая зависимости/импорт). Предпочтительно он также перезапускает его, используя содержимое sys.argv , чтобы сохранить все флаги такими, какими они были.

Так что я не могу найти/нужна хорошая процедура перезапуска, которая убивает текущий экземпляр программы и запускает новый, используя те же аргументы.

Предпочтительно, решение должно работать и для Windows и Mac, но это не существенно.

ОТВЕТЫ

Ответ 1
Ответ 2

Я думаю, что это более сложный ответ, так как иногда у вас может быть слишком много открытых файловых объектов и дескрипторов, которые могут вызвать проблемы с памятью или параллельные подключения к сетевому устройству.

Ответ 3

UPDATE — из приведенного выше ответа с некоторым примером для дальнейшего использования

И у меня есть server.py , где мне нужно перезапустить само приложение, поэтому у меня было:

но это не перезапустило само приложение, выполнив команду runme.sh, поэтому, когда я использовал этот способ:

Затем я смог перезапустить себя

Ответ 4

Я знаю, что это решение технически не является то, о чем вы просите, но если вы хотите быть на 100% уверенным, что вы освободили все или не хотите полагаться на зависимости, вы можете просто запустить script из цикла в другой:

Затем вы можете перезапустить main.py так же, как:

Ответ 5

В моем случае в пути к файлу Python есть пробелы. Таким образом, добавив правильное форматирование, проблема может быть решена.

Обратите внимание, что в моем случае мой файл python не имеет других аргументов. Так что, если у вас есть другие аргументы, вы должны разобраться с ними.

Это решает проблему перезапуска скрипта Python с пробелами в пути:

Ответ 6

Работает на Windows (без аргументов)

Ответ 7

Вдохновлен @YumYumYum и исправил проблему с помощью restart.sh и os.execl

Добавьте это в ваш main.py

Ответ 8

Я использую это, чтобы дать возможность пользователям перезапустить скрипт в консоли. Надеюсь, это поможет.

Таким образом, пользователь может ввести опцию "Y/N", чтобы перезапустить программу или нет.

Например, я делаю калькулятор и хочу, чтобы после выдачи результата скрипт возвращался к вопросу "введите знак операции". Как мне это сделать?

what = input( "Введите знак операции (+, -, *, /, ^): ")

a = float(input( "Введите первое число: "))
b = float(input( "Введите второе число: "))

if what == "+":
c = a + b
print ("Результат: " + str(c))

elif what == "-":
c = a - b
print ("Результат: " + str(c))

elif what == "*":
c = a * b
print ("Результат: " + str(c))

elif what == "/":
c = a / b
print ("Результат: " + str(c))

elif what == "^":
c = a ** b
print ("Результат: " + str(c))

else:
print ("Похоже, вы неправильно ввели знак операции!")

Правило хорошего тона в python - оборачивать работающий код в методы и функции.

Стандартный шаблон для main:

В вашем случае весь код имеет смысл обернуть main, а main в цикл.

Также нужно проверять пользовательский ввод (добавил обработку исключения, если пользователь ввёл не float).

Старайтесь не повторять одно и то же в коде (print("Результат")). Такой стиль называется "индусским кодом" и считается плохим тоном в программировании.

Хорошим тоном будет подумать штатных о способах выхода из программы. Вариантов не пишу, предлагаю продумать самостоятельно.


while True:
в самое начало и всему ниже отступ увеличить одинаково
последний elif убрать
и да, import запихни в самый верх.
не делают импорты посередине кода


сделал, как вы сказали, программа всё равно не перезапускается (

クマのプーさん Мудрец (15473) потому что raise SystemExit относится к блоку if o == 'нет', а не само по себе

Как мы знаем, Python является популярным языком сценариев из-за его универсальных возможностей. В этой статье мы напишем скрипт Python для перезагрузки компьютера. Давайте начнем с того, как перезапустить систему с Python.

Note: For this to work, you have to import os library in the ide. If you don’t have it, then ‘ pip install os ‘ through the Command Prompt.

Causion: Please ensure that you save and close all the program before running this code on the IDLE, as the below program will immediately restart your computer.

Ниже приведена реализация Python —

restart = input ( "Do you wish to restart your computer ? (yes / no): " )

if restart = = 'no' :

os.system( "shutdown /r /t 1" )

Читайте также: