Як вручну порушити виконання оператора у вікні Python ArcMap?


20

Як можна порушити виконання тривалого процесу в консолі пітона ArcMap?

Наприклад, як ви зламаєте довгу ітерацію, подібну до наведеної нижче, після її запуску?

for i in range(1, 50):
  # some long process which takes over a minute to complete

Я хочу в будь-який момент зупинити процес, натиснувши комбінацію клавіатури, клацнувши кнопку чи щось подібне, поки працює код, який я вводите у вікно консолі .


1
Під перервою ти маєш на увазі чи маєш на увазі змусити його кинути?
РК

@ RK: Так, я хочу змусити його покинути будь-який час, тому що я (1) бачив небажаний вихід, (2) ввів неправильний порядок обробки, (3) будь-яку іншу причину.
Алекс Ессільфі

2
Просто перевірте можливі комбінації клавіш. Ctrl + Z, Ctrl + C і ESC - всі не працюють. Вам може знадобитися використовувати IDLE або інший IDE, щоб досягти того, що ви хочете.
РК

використовувати ctrl + Z в lx-терміналі для машини Windows

@anurag: Дякую за пропозицію, але я цього не хочу. Мені потрібно зупинити виконання всередині вікна Python в ArcMap, не використовуючи IDE або термінал. Я вже знаю, як припинити виконання в терміналі або IDE.
Алекс Ессільфі

Відповіді:


14

Просто випробували його і ESC не працює. ArcGIS просто на мить застигає, а потім продовжується. Здається, не існує способу змусити вийти з нього після запуску в консолі ArcGIS Python. Ви не можете його вбити за допомогою диспетчера завдань, оскільки там не з’являється процес Python.

Якщо ви дійсно хочете змусити вийти з нього, ви можете скористатися IDE, як IDLE, а не робити це в консолі ArcGIS Python. Наприклад, в IDLE, ви можете використовувати Ctrl+ Zабо Ctrl+ Cдля завершення виконання.


1
Вікно ArcGIS Pro Python дозволяє зупинити код Python під час його виконання через технологічні обмеження вікно ArcGIS 10.X не може.
Jason Scheirer

9

Це метод, який я використовую:

  • створити невеликий сценарій python під назвою kill_processx.py
  • При запуску kill_processx створює невеликий тестовий файл під назвою stop_processx.txt.
  • Угорі або внизу циклу в основній програмі перевірте, чи існує stop_processx.txt.
  • Якщо вона існує, виконайте будь-які необхідні вам процедури очищення, а потім зупиняйтесь витончено.
  • Видаліть файл stop_processx.txt

приклад файлу kill_processx.py:

import os 
nameof_killfile="stop_processx.txt"

if os.path.exists(nameof_killfile): 
    os.remove(nameof_killfile) 
else:
    killit=open(nameof_killfile,"w") 
    killit.close()

Який сценарій ви називаєте "kill_processx.py"?
Аарон

1
скрипт kill_process просто створює порожній файл txt з правильним іменем у правильній папці.
mhoran_psprep

Чи можете ви, будь ласка, включити зразок сценарію у свій пост, щоб ми могли краще зрозуміти, як це могло б допомогти у питанні ОП?
Аарон

@mhoran_psprep: Я прийняв відповідь РК, тому що він відповідає на питання (неможливо, якщо в IDE). +1 для вашого вирішення. Я здогадуюсь, я це втілю в майбутньому.
Алекс Ессільфі

4

Неправильно застосовувати відключення за допомогою тактики грубої сили. Швидше, як @Aragon вказував, ви повинні додати обробку помилок до свого сценарію, щоб ізолювати компоненти та / або зупинити сценарій, якщо певні умови не дотримані. Як зазначає @RK, консоль pychon ArcGIS поруч з непридатною для запуску складних сценаріїв і, на практиці, повинна бути зарезервована для простих операцій - дотримуйтесь IDLE , pythonwin , pyscripter або будь-якого з інших IDE. Ось дискусії, пов’язані з вашим запитанням:

Як я можу використовувати sys.exit (0) в arcpy-скрипті для раннього виходу без появи повідомлення про помилку?

Закінчення сценарію Python

Як зупинити команду чи підказку в Python?


1
І звичайно, з таким IDE, як PyScripter, ви можете просто додати "крапку" у своєму операторі "для ... діапазону", запустити скрипт у "режимі налагодження", і IDE автоматично "призупинить" при цьому вказуйте під час ітераційного процесу та дозволяйте перевірити результати, які вже були оброблені.
RyanKDalton-OffTheGridMaps

2

Я працюю в 10.4, і я виявив, що я можу натиснути кнопку "Закрити X" введіть тут опис зображенняпід час запуску сценарію. ArcMap запитає мене, чи хочу я скасувати операцію.

введіть тут опис зображення

Я натискаю Так. Потім ArcMap запитує мене, чи хочу я зберегти перед виходом. Я натискаю Скасувати. Сценарій кидає переривання клавіатури.


На яку кнопку закриття натискаєте, щоб запустити цю послідовність дій?
Алекс Ессільфі

Вікна червоного кольору X у верхньому правому куті більшості програмного забезпечення (усіх?). Дивіться маленьку картинку в моїй відповіді.
Брюндаж Еміля

1

якщо ви хочете вирішити пітонічним способом, спробуйте:

import sys
sys.exit()

або використовувати:

raise SystemExit()

детально:

import time
import sys

sTime= time.time()

if time.time() - sTime > 60:
   sys.exit()

сподіваюся, що це допоможе тобі ...


Ні, це не те, що я хочу. Я хочу в будь-який час зупинити процес, натиснувши комбінацію клавіатури, натиснувши кнопку чи щось подібне, поки працює код, який я маю вводити у вікно консолі . Мені відомо, sys.exit()але це не працює, коли працює цикл або подібний тривалий процес.
Алекс Ессільфі

@Upvoters: це не відповідь, яку я шукаю. Це не відповідає на моє запитання . Я хочу перервати виконання оператора (як правило, ітерації) натисканням комбінації клавіатури або натисканням на кнопку чи щось подібне.
Алекс Ессільфі

1

Принаймні, в ArcMap 10.4 ви можете це зробити. Переконайтеся, що вікно "Результати" видно. (Якщо не знайти його в розділі "Геообробка"). Тепер, якщо у вас працює команда, вона з’явиться у цьому вікні. Клацніть правою кнопкою миші та натисніть «скасувати».



0

Використовуючи IDLE, у мене є файл під назвою "stop.py", який містить єдиний рядок: "пройти". Тримайте цей файл відкритим в IDLE, поки працює інший .py-скрипт. Клацання F5 у вікні "stop.py" скидає IDLE.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.