Я пишу программу Python, которая, если пользователь меняет настройки во время ее запуска, должна быть перезапущена, чтобы применить измененные настройки. Есть ли способ сделать это? Я думаю что-то вроде:
Примечание. Я нахожусь в Windows, если это имеет значение
Я бы обошел всю тоску, от которой вы, вероятно, попадете, чтобы попытаться снова запустить себя и оставить ее в руках окружающей среды.
Под этим я имею в виду:
У вас есть управляющая программа, которая делает не что иное, как запуск вашей программы (с теми же параметрами, которые были заданы) в цикле, когда ваша программа выходит с определенным кодом «перезагрузки». Это может быть так же просто, как файл cmd или сложнее, чем другая (очень простая) программа Python, использующая os.system ). В принципе, до тех пор, пока контрольная программа получает код «перезагрузка», он будет повторно запускать вашу программу с точно такими же параметрами. Любой другой код заставит его выйти с этим кодом.
PyCharm не запускается код
Если вы хотите полностью выйти, попробуйте запустить свою настоящую программу 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
Добавьте это в ваш 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» )
- Как сделать пищевую пирамиду по технологии
- Как сделать из браслета собачку
- Как сделать идеальное отражение в ryse son of rome
- Как сделать пудинг в мультиварке
- Как сделать светящийся футаж
Источник: 1svoimi-rukami.ru
Покоряем Python — уроки для начинающих
В отличие от инструкций import и from :
• reload – это не инструкция, а функция.
• Функции reload передается существующий объект модуля, а не имя.
• В Python 3.0 функции reload находится в модуле imp , который требуется импортировать, чтобы получить доступ к функции. Функция reload ожидает получить объект, поэтому к моменту ее вызова модуль уже должен быть успешно импортирован (если операция импорта оказалась неудачной из-за синтаксических или каких-либо других ошибок, вам может потребоваться повторить ее, прежде чем можно будет повторно загрузить модуль).
Кроме того, синтаксис инструкции import и функции reload отличается: аргумент должен передаваться функции reload в круглых скобках, а инструкции import – без них. Повторная загрузка модуля выполняется примерно следующим образом:
import module # Первоначальное импортирование
. используются атрибуты модуля.
. # Теперь выполняются изменения в файле модуля
.
from imp import reload # Импортировать функцию reload (в 3.0)
reload(module) # Загрузить обновленный модуль
. используются атрибуты модуля.
Это типичный случай, когда вы импортируете модуль, затем изменяете исходный программный код в текстовом редакторе, а потом повторно загружаете его. Когда вы вызываете функцию reload, интерпретатор повторно читает файл с исходными текстами и выполняет инструкции, находящиеся на верхнем уровне. Пожалуй, самое важное, что следует знать о функции reload , – это то, что она изменяет непосредственно сам объект модуля – она не удаляет и не создает его повторно. Вследствие этого все ссылки на объект модуля, имеющиеся в программе, автоматически будут учитывать изменения, произошедшие в результате повторной загрузки. А теперь подробнее о том, как происходит повторная загрузка:
• Функция reload запускает новый программный код в файле модуля в текущем пространстве имен модуля. При повторном выполнении программный код перезаписывает существующее пространство имен вместо того, чтобы удалять его и создавать вновь.
• Инструкции присваивания на верхнем уровне файла замещают имена новыми значениями. Например, повторный запуск инструкции def приводит к замещению предыдущей версии функции в пространстве имен модуля, выполняя повторную операцию присваивания имени функции.
• Повторная загрузка оказывает воздействие на всех клиентов, использовавших инструкцию import для получения доступа к модулю. Клиенты, использовавшие инструкцию import, получают доступ к атрибутам модуля, указывая полные их имена, поэтому после повторной загрузки они будут получать новые значения атрибутов.
• Повторная загрузка будет воздействовать лишь на тех клиентов, которые еще только будут использовать инструкцию from в будущем. Клиенты, которые использовали инструкцию from для получения доступа к атрибутам в прошлом, не заметят изменений, произошедших в результате повторной загрузки, – они по-прежнему будут ссылаться на старые объекты, полученные до выполнения перезагрузки.
Источник: pythlife.blogspot.com
Как перезапустить программу на Python
Вызов функции start() на завершенном процессе приведет к ошибке AssertionError, указывающей на то, что процесс может быть запущен только один раз. Вместо этого, чтобы перезапустить процесс в Python, необходимо создать новый экземпляр процесса с той же конфигурацией, а затем вызвать функцию start().
Связанные ответы
Что делает функция reset () в Python?
Метод reset (Python)
- Этот метод доступен в режиме чтения, записи или добавления.
- В режимах чтения и записи reset перемещает указатель записи в первый регистр, что позволяет выполнять несколько передач данных. …
- При выполнении нескольких проходов данных метод reset должен быть вызван до определения новых переменных в последующих проходах.
Как повторить программу в Python?
repeat() Модуль itertools предоставляет функцию repeat() для того, чтобы практиковать повторение в Python. В функции repeat() мы предоставляем данные, а также количество повторений данных.
Как перезапустить Python IDLE?
Чтобы выполнить файл в IDLE, просто нажмите клавишу F5 на клавиатуре. Вы также можете выбрать Run → Run Module в строке меню. Любой из этих вариантов перезапустит интерпретатор Python, а затем запустит написанный вами код со свежим интерпретатором.
Как перезапустить программу на основе пользовательского ввода Python?
Вы можете просто поместить всю программу в определяемую пользователем функцию (конечно, вы должны сделать дополнительный отступ) и перезапустить ее в любое время, используя эту строку кода: myfunctionname() .
Как выполнить сброс настроек?
Как выполнить Factory Reset на смартфоне Android?
- Нажмите Настройки.
- Нажмите пункт Общие https://geocentr-msk.ru/python-ru/kak-perezapustit-programmu-na-python/» target=»_blank»]geocentr-msk.ru[/mask_link]