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

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

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 («Похоже, вы неправильно ввели знак операции!»)

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

Как сделать автозапуск программ на Python по расписанию

Как сделать программу Python автоматически перезапустить себя

Как сделать так, чтобы программа на 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», чтобы снова запустить программу.

Все со мной здесь? Итак, мой вопрос: как заставить программу автоматически перезагружаться без необходимости делать это вручную?

user6067779 15 мар ’16 в 17:42 2016-03-15 17:42
2016-03-15 17:42

4 ответа

Это зависит от того, что вы подразумеваете под «перезагрузить себя». Если вы просто хотите непрерывно выполнять один и тот же код, вы можете заключить его в функцию, а затем вызвать изнутри while True цикл, такой как:

Читайте также:
Программа которая скрывает номер телефона

>>> 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 скриптов по времени

Более подробное обсуждение этого метода можно найти в посте » Перезапуск скрипта Python внутри себя » Петра Земека.

Один пункт, который отмечает эта статья:

Если вы используете решение выше, имейте в виду, что exec*() функции вызывают немедленную замену текущего процесса без очистки открытых файловых объектов. Поэтому, если у вас есть какие-либо открытые файлы во время перезапуска скрипта, вы должны очистить их, используя f.flush() или же os.fsync(fd) перед вызовом exec*() функция.

Источник: stackru.com

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

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

./myscript.py —some-flag setting

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

Читайте также:
Как правильно составить программу выполнения работ

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

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

ОТВЕТЫ

Ответ 1

Ответ 2

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

import os import sys import psutil import logging def restart_program(): «»»Restarts the current program, with file objects and descriptors cleanup «»» try: p = psutil.Process(os.getpid()) for handler in p.get_open_files() + p.connections(): os.close(handler.fd) except Exception, e: logging.error(e) python = sys.executable os.execl(python, python, *sys.argv)

Ответ 3

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

#!/bin/bash kill -9 server.py python /home/sun/workspace/c/src/server.py python main.py») print «Restarting. » time.sleep(0.2) # 200ms to CTR+C twice

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

quit()

Ответ 5

Я немного улучшил код # s3niOr.

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

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

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

import os import sys import psutil import logging def restart_program(): «»»Restarts the current program, with file objects and descriptors cleanup «»» try: p = psutil.Process(os.getpid()) for handler in p.get_open_files() + p.connections(): os.close(handler.fd) except Exception, e: logging.error(e) python = sys.executable os.execl(python, python, «»<>»».format(sys.argv[0]))

Ответ 6

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

Читайте также:
Программа которая убирает панель задач

os.startfile(__file__) sys.exit()
os.startfile(sys.argv[0]) sys.exit()

Ответ 7

restart.sh #!/bin/bash/ pkill -f main.py python main.py

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

os.excel(«restart.sh»,»»)

Ответ 8

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

def close_restart(self,csvfile): choice = input(‘Do you want to restart the program? Please select ‘Y’ if you would like to restart.’) if choice == ‘Y’ or choice == ‘y’: print(‘Restarting now. ‘) os.execl(sys.executable, sys.executable, *sys.argv) else: print(‘Thank you for using the tool!’) print(‘The program will close in 10s. ‘) time.sleep(10)

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

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

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