Я хотел бы помочь остановить программу python через определенное время, как говорится в названии. Моя программа — небольшая забавная программа, которую я пытался. Код:
import pygame, sys, random, time, os
skier_images = [«puffle_down.png», «puffle_down.png», «puffle_down.png»,
«puffle_down.png», «puffle_down.png»]
class SkierClass(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(«puffle_down.png»)
self.rect = self.image.get_rect()
self.rect.center = [320, 100]
self.angle = 0
def turn(self, direction):
self.angle = self.angle + direction
if self.angle < -2: self.angle = -2
if self.angle > 2: self.angle = 2
center = self.rect.center
self.image = pygame.image.load(skier_images[self.angle])
self.rect = self.image.get_rect()
self.rect.center = center
speed = [self.angle, 6 — abs(self.angle) * 2]
Как закрыть или завершить процесс, зависшую программу или вирус в командной строке
return speed
def move(self, speed):
self.rect.centerx = self.rect.centerx + speed[0]
if self.rect.centerx < 20: self.rect.centerx = 100
if self.rect.centerx > 620: self.rect.centerx = 620
class ObstacleClass(pygame.sprite.Sprite):
def __init__(self, image_file, location, type):
pygame.sprite.Sprite.__init__(self)
self.image_file = image_file
self.image = pygame.image.load(image_file)
self.location = location
self.rect = self.image.get_rect()
self.rect.center = location
self.type = type
self.passed = False
def scroll(self, terrainPos):
self.rect.centery = self.location[1] — terrainPos
def create_map(start, end):
obstacles = pygame.sprite.Group()
locations = []
gates = pygame.sprite.Group()
for i in range(10):
row = random.randint(start, end)
col = random.randint(0, 9)
location = [col * 64 + 20, row * 64 + 20]
if not (location in locations):
locations.append(location)
type = random.choice([«tree», «flag»])
if type == «tree»: img = «puffle_bomb.png»
elif type == «flag»: img = «puffle-o.png»
obstacle = ObstacleClass(img, location, type)
obstacles.add(obstacle)
return obstacles
def animate():
screen.fill([255, 255, 255])
pygame.display.update(obstacles.draw(screen))
screen.blit(skier.image, skier.rect)
screen.blit(score_text, [10, 10])
pygame.display.flip()
def updateObstacleGroup(map0, map1):
obstacles = pygame.sprite.Group()
for ob in map0: obstacles.add(ob)
for ob in map1: obstacles.add(ob)
return obstacles
pygame.init()
screen = pygame.display.set_mode([640,640])
clock = pygame.time.Clock()
skier = SkierClass()
speed = [0, 6]
map_position = 0
points = 0
map0 = create_map(20, 29)
map1 = create_map(10, 19)
activeMap = 0
obstacles = updateObstacleGroup(map0, map1)
Как отключить приложения работающие в фоновом режиме
font = pygame.font.Font(None, 50)
while True:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT: os._exit(0)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
speed = skier.turn(-1)
elif event.key == pygame.K_RIGHT:
speed = skier.turn(1)
skier.move(speed)
map_position += speed[1]
if map_position >=640 and activeMap == 0:
activeMap = 1
map0 = create_map(20, 29)
obstacles = updateObstacleGroup(map0, map1)
if map_position >=1280 and activeMap == 1:
activeMap = 0
for ob in map0:
ob.location[1] = ob.location[1] — 1280
map_position = map_position — 1280
map1 = create_map(10, 19)
obstacles = updateObstacleGroup(map0, map1)
for obstacle in obstacles:
obstacle.scroll(map_position)
hit = pygame.sprite.spritecollide(skier, obstacles, False)
if hit:
if hit[0].type == «tree» and not hit[0].passed:
points = points — 100
skier.image = pygame.image.load(«puffle_crash.jpg»)
animate()
pygame.time.delay(1000)
skier.image = pygame.image.load(«puffle_down.png»)
skier.angle = 0
speed = [0, 6]
hit[0].passed = True
elif hit[0].type == «flag» and not hit[0].passed:
points += 100
obstacles.remove(hit[0])
score_text = font.render(«Score: » +str(points), 1, (0, 0, 0))
animate()
Я не уверен, какой модуль использовать, и как. Могу ли я использовать модуль «Время» и как? Так что в принципе, это так. Примечание. Просто говорю, я знаю, что есть другие вопросы, подобные этому, но я новый программист, поэтому мне хотелось бы получить более общий ответ.
спросил(а) 2013-09-16T03:38:00+04:00 9 лет, 9 месяцев назад
Источник: progi.pro
Как остановить выполнение программы Python в IDLE
У меня есть скрипт на Python, который использует plt.show() как это последняя инструкция. При запуске IDLE просто зависает после последней инструкции. Я получаю изображение, но не возвращаю подсказку.
В других скриптах я обычно использую ctrl-c чтобы сломать программу (иногда не работает сразу), но как мне вернуть подсказку с помощью plt.show() ? Ctrl-c не работает .
Есть ли другие способы остановить программу?
Это IDLE в Windows, если это имеет значение.
задан 17 марта ’10, 04:03
4 ответы
Я видел эту проблему с IDLE и matplotlib при их использовании в Windows. Я не знаю точной причины, но Ctrl-c пару раз обычно помогал мне. Если это не сработает для вас, вы можете использовать обычный интерпретатор вместо того, чтобы записывать свой сюжет непосредственно в файл, а не на экран.
Это один из тех (частых) случаев, когда IDLE не ведет себя как обычный сценарий Python или сеанс интерпретатора. Из-за этого я обычно избегаю IDLE.
ответ дан 17 мар ’10, в 07:03
К сожалению, возможности Windows невелики. Я использую интерактивный интерпретатор напрямую (несмотря на то, что cmd.exe не так уж хорош) и вызываю Python из gvim для запуска скриптов. Любое количество редакторов и IDE может вызывать Python напрямую, и многие из них перечислены на wiki.python.org/moin/IntegratedDevelopmentEnvironments . iPython может страдать от некоторых из тех же проблем, что и IDLE, но я подозреваю, что он изо всех сил старается заставить работать matplotlib (я сам никогда не использую его, поэтому не могу этого обещать). — Майк Грэм
Когда вы нажимаете ^ C в оболочке IDLE, оболочка отправляет сообщение процессу выполнения, чтобы вызвать прерывание. В большинстве случаев, когда это не удается, это было бы ошибкой, если бы кто-то нажал ^ C во время работы непосредственно под Python. Существуют совершенно не зависящие от IDLE причины, по которым Python не всегда может корректно останавливаться и выдавать приглашение >>> после сигнала прерывания ^ C. — Терри Ян Риди
Ctrl + F6 (перезапустить оболочку)
Источник: stackovergo.com
Python-сообщество
- Начало
- » Python для новичков
- » Прерывание скрипта и повторный запуск
#1 Дек. 13, 2022 02:56:43
Прерывание скрипта и повторный запуск
Добрый день. Задача такая: при работе скрипта нужно его остановить, а затем продолжить выполнение с того же места остановки. Например, при парсинге или массовой отправки сообщений smtp. Т.е. структура, я думаю, будет одна: из списка берется url или email и обрабатывается в функции парсинга/smtp.
Нужно при остановке скрипта дать функции парсинга/smtp завершиться и остановиться на выдаче очередного url/email, а при повторном запуске начать с точки останова. Подскажите, пожалуйста, как это можно осуществить? Интересуют все возможные теории/названия/библиотеки. Спасибо.
#2 Дек. 13, 2022 04:23:02
Прерывание скрипта и повторный запуск
robisho
Подскажите, пожалуйста, как это можно осуществить?
Можно сделать по принципу, который есть у браузеров и программ для закачки. Когда она закачивает, она регистрирует все закачанные части. При её остановке остаются эти файлы, в которых записано то последнее, что закачалось. При новом запуске она ищет эти файлы, в которых записано, что там было до этого запуска, и по ним действует дальше, так же их меняя.
robisho
Нужно при остановке скрипта дать функции парсинга/smtp завершиться и остановиться на выдаче очередного url/email
При сигнале остановки программа должна доделать задачу и выйти из-за того, что был получен этот сигнал остановки. Ну, ты получаешь сигнал, устанавливаешь флажок, что был получен сигнал, а в конце цикла этот флажок проверяется.
Я такой закачник делал, я очень много накачал им в итоге. У него в текстовый файл можно было занести сотню ссылок и он помечал каждую (закачивалась она или не закачивалась), всегда можно было залезть в этот файл и пометить какую-нибудь закачанную ссылку, что она не закачана, и она тогда по новой качалась.
При этом при закачке эти недокачанные файлы сохранялись под специальными именами на основе md5-хешей, чтобы они все были уникальными, а после закачки этих файлов, которая могла быть продолжена через несколько дней, через неделю, через месяц, эти хеши срезались просто и в конечных именах их не было уже. То есть они ставились автоматически только на то время, пока файл скачался не полностью, а потом так же автоматически убирались, когда он был докачан полностью. Интересно это всё было, и оно работало как часы. Действительно, можно было десятки фильмов тяжёлых качать одновременно, сериалы там всякие с кучей серий в хорошем качестве, и они не перемешивались вообще никак, а качать я там мог их целую неделю или даже больше. Вот эти хеши давали возможность не беспокоиться за совпадающие имена, которые там иногда появлялись у разных фильмов и серий.
Отредактировано py.user.next (Дек. 13, 2022 04:25:18)
#3 Дек. 13, 2022 05:57:46
Прерывание скрипта и повторный запуск
py.user.next
спасибо за идеи) ну у меня не такая глобальная задача будет, нужно будет просто ставить скрипт на паузу в течении одной сессии терминала или стопить. сохранять состояния, думаю не надо.
а каким образом можно реализовать получение сигнала остановки?
например,
цикл for — выдает ссылки: проверка нажатия клавиши P проверка нажатия клавиши S тело функции проверка нажатия клавиши P проверка нажатия клавиши S
а по поводу сохранения ссылок думаю так: индекс ссылки, выданной из for, сохраняется в global temp, и после паузы список редактируется на
[temp+1:]
Отредактировано robisho (Дек. 13, 2022 06:06:53)
Источник: python.su