ArcMap'in Python penceresinde deyim yürütmesini elle nasıl kırabilirim?


20

ArcMap'ın python konsolunda uzun süren bir işlemin yürütülmesi nasıl kırılır?

Örneğin, başladıktan sonra aşağıdaki gibi uzun bir yinelemeyi nasıl kırarsınız?

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

Konsol penceresinde girdiğim kod çalışırken, bir klavye kombinasyonuna basarak, bir düğmeyi veya benzer bir şeyi tıklatarak istediğim zaman işlemi durdurmak istiyorum .


1
Yani demek istediğim, onu bırakmaya zorlamak mı demek istiyorsun?
RK

@RK: Evet, istediğim zaman bırakmaya zorlamak istiyorum, çünkü (1) istenmeyen bir çıktı gördüm, (2) yanlış işleme sırasına girdim, (3) başka bir sebep.
Alex Essilfie

2
Sadece olası klavye kısayollarını kontrol ettim. Ctrl + Z, Ctrl + C ve ESC çalışmaz. İstediğinizi gerçekleştirmek için IDLE veya başka bir IDE kullanmanız gerekebilir.
RK

Windows makine için lx terminalinde ctrl + Z kullanın

@anurag: Öneriniz için teşekkür ederim ama istediğim bu değil. Ne istiyorum bir IDE veya Terminal kullanarak değil, ArcMap Python penceresinin içinde yürütmeyi durdurmaktır. Bir terminalde veya IDE'de yürütmeyi nasıl sonlandıracağımı zaten biliyorum.
Alex Essilfie

Yanıtlar:


14

Sadece test ettim ve ESC çalışmıyor. ArcGIS bir anlığına donar ve sonra devam eder. ArcGIS Python konsolunda çalıştıktan sonra zorla çıkmanın bir yolu yok gibi görünüyor. Python işlemi orada görünmediğinden Görev Yöneticisi'ni kullanarak öldüremezsiniz.

Gerçekten çıkmayı zorlamak istiyorsanız, ArcGIS Python konsolunda yapmak yerine IDLE gibi bir IDE kullanmayı düşünebilirsiniz. Örneğin IDLE'de , yürütmeyi sonlandırmak için Ctrl+ Zveya Ctrl+ Ckullanabilirsiniz.


1
ArcGIS Pro Python penceresi, ArcGIS 10.X penceresinin yapamadığı teknolojik sınırlamalar nedeniyle Python kodunu yürütürken durdurmanızı sağlar.
Jason Scheirer

9

Kullandığım yöntem bu:

  • kill_processx.py adlı küçük bir python betiği oluşturun
  • Çalıştırıldığında kill_processx stop_processx.txt adlı küçük bir test dosyası oluşturur.
  • Ana programdaki döngünün üstünde veya altında stop_processx.txt dosyasının var olup olmadığını kontrol edin.
  • Varsa, ihtiyacınız olan temizleme yordamlarını yürütün, ardından durup durun.
  • Stop_processx.txt dosyasını silin

kill_processx.py dosyası örneği:

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" olarak adlandırdığınız komut dosyası nedir?
Aaron

1
kill_process betiği, doğru klasörde doğru ada sahip boş bir txt dosyası oluşturur.
mhoran_psprep

Lütfen gönderinize örnek bir komut dosyası ekleyebilir misiniz, böylece bunun OP'nin sorusuna nasıl yardımcı olabileceği konusunda daha iyi bir fikir edinebilir miyiz?
Aaron

@mhoran_psprep: Soruyu cevapladığı için RK'nın cevabını kabul ettim (IDE'de olmadığı sürece mümkün değildir). Geçici çözümünüz için +1. Sanırım gelecekte uygulayacağım.
Alex Essilfie

4

Kaba kuvvet taktiklerini kullanarak kapanmayı zorlamak kötü bir uygulamadır. Aksine, @Aragon'un belirttiği gibi, bileşenleri izole etmek ve / veya belirli koşullar karşılanmadığı takdirde komut dosyasını durdurmak için komut dosyasına hata işleme eklemelisiniz. @RK'nin işaret ettiği gibi, ArcGIS python konsolu karmaşık komut dosyalarını çalıştırmak için değersizdir ve pratikte basit işlemler için ayrılmalıdır - IDLE ile sopa , pythonwin , pyscripter veya diğer IDE'lerin herhangi biriyle . Sorunuzla ilgili tartışmalar:

Bir hata mesajı göstermeden erken çıkmak için bir arcpy komut dosyasında sys.exit (0) nasıl kullanabilirim?

Bir Python betiğini sonlandırma

Python'da bir komut veya istem nasıl durdurulur?


1
Ve elbette, PyScripter gibi bir IDE ile, sadece "for ... range" ifadenize bir "kırılma noktası" ekleyebilir, komut dosyasını "hata ayıklama modunda" çalıştırabilirsiniz ve IDE aynı anda otomatik olarak "duraklayacaktır" yinelemeli işlem sırasında işaret edin ve önceden işlenmiş sonuçları incelemenize izin verin.
RyanKDalton-OffTheGridMaps

2

10.4'te çalışıyorum ve resim açıklamasını buraya girinbir komut dosyası çalışırken yakın X'i tıklatabildiğimi fark ettim . ArcMap bana bir işlemi iptal etmek isteyip istemediğimi soracak.

resim açıklamasını buraya girin

Evet'i tıklıyorum. ArcMap sonra çıkmadan önce Kaydetmek isteyip istemediğimi soruyor. İptal'i tıklıyorum. Betik bir klavye kesmesi atar.


Bu işlem sırasını tetiklemek için hangi kapatma düğmesini tıklıyorsunuz?
Alex Essilfie

Windows yazılımlarının çoğunun sağ üst köşesindeki kırmızı X işareti. Cevabımdaki küçük resme bakın.
Emil Brundage

1

pythonic bir şekilde çözmek istiyorsanız, şunu deneyin:

import sys
sys.exit()

ya da kullan:

raise SystemExit()

detayda:

import time
import sys

sTime= time.time()

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

umarım sana yardımcı olur ...


Hayır, istediğim bu değil . Konsol penceresinde girdiğim kod çalışırken, bir klavye kombinasyonuna basarak, bir düğmeyi veya benzer bir şeyi tıklatarak istediğim zaman işlemi durdurmak istiyorum . Biliyorum sys.exit()ama bir döngü veya benzer şekilde uzun bir işlem çalışırken bu işe yaramaz.
Alex Essilfie

@Upvoters: aradığım cevap bu değil . Soruma cevap vermiyor . Bir klavye kombinasyonuna basarak veya bir düğmeye veya benzer bir şeye tıklayarak bir ifadenin (genellikle yineleme) yürütülmesini kırmak istiyorum.
Alex Essilfie

1

En azından ArcMap 10.4'te bunu yapabilirsiniz. "Sonuçlar" penceresinin görünür olduğundan emin olun. ("Geoprocessing" altında bulamazsanız). Şimdi çalışan bir komutunuz varsa bu pencerede görünecektir. Üzerine sağ tıklayın ve "iptal" e basın.



0

IDLE kullanarak, tek satır içeren "stop.py" adlı bir dosya var: "pass". Başka bir .py komut dosyası çalışırken bu dosyayı IDLE'de açık tutun. "Stop.py" penceresinde F5 tıklandığında IDLE sıfırlanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.