จะหยุดการประมวลผลข้อความสั่งด้วยตนเองในหน้าต่าง Python ของ ArcMap ได้อย่างไร?


20

หนึ่งจะหยุดการดำเนินการของกระบวนการที่ใช้เวลานานในคอนโซลหลามของ ArcMap ได้อย่างไร?

ตัวอย่างเช่นคุณจะแบ่งการทำซ้ำที่ยาวนานเช่นเดียวกับที่ด้านล่างเมื่อเริ่มต้นอย่างไร

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

ฉันต้องการที่จะหยุดกระบวนการในเวลาใดที่ฉันต้องการโดยการกดแป้นพิมพ์พร้อมกันการคลิกปุ่มหรือสิ่งที่คล้ายกันในขณะที่รหัสฉันมีการป้อนข้อมูลในหน้าต่างคอนโซลที่กำลังทำงาน


1
คุณหมายถึงการหยุดพักหมายถึงบังคับให้เลิกหรือไม่
RK

@RK: ใช่ฉันต้องการบังคับให้ออกเมื่อใดก็ได้ที่ฉันต้องการเพราะฉัน (1) เห็นผลลัพธ์ที่ไม่พึงประสงค์ (2) ป้อนคำสั่งประมวลผลที่ไม่ถูกต้อง (3) เหตุผลอื่นใด
Alex Essilfie

2
เพียงตรวจสอบแป้นพิมพ์ลัดที่เป็นไปได้ Ctrl + Z, Ctrl + C และ ESC ไม่ทำงาน คุณอาจต้องใช้ IDLE หรือ IDE อื่นเพื่อให้บรรลุตามที่คุณต้องการ
RK

ใช้ ctrl + Z ใน lx terminal สำหรับเครื่อง windows

@anurag: ขอบคุณสำหรับคำแนะนำของคุณ แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ สิ่งที่ฉันต้องการคือหยุดการดำเนินการภายในหน้าต่าง Python ใน ArcMap ไม่ใช่การใช้ IDE หรือ Terminal ฉันรู้วิธียุติการดำเนินการในเทอร์มินัลหรือ IDE
Alex Essilfie

คำตอบ:


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

นี่คือวิธีที่ฉันใช้:

  • สร้างสคริปต์หลามขนาดเล็กที่เรียกว่า 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

คุณช่วยรวมสคริปต์ตัวอย่างไว้ในโพสต์ของคุณได้ไหมเพื่อที่เราจะได้รับความคิดที่ดีขึ้นว่ามันจะช่วยได้อย่างไรกับคำถามของ OP?
แอรอน

@mhoran_psprep: ฉันยอมรับคำตอบของ RKเพราะมันตอบคำถาม (มันเป็นไปไม่ได้ยกเว้นใน IDE) +1 สำหรับวิธีแก้ปัญหาของคุณ ฉันเดาว่าฉันจะใช้มันในอนาคต
Alex Essilfie

4

มันเป็นการปฏิบัติที่ไม่ดีที่จะบังคับให้ปิดเครื่องโดยใช้กลยุทธ์การใช้กำลังดุร้าย ค่อนข้างเป็น @Aragon ชี้ให้เห็นว่าคุณควรเพิ่มการจัดการข้อผิดพลาดให้กับสคริปต์ของคุณเพื่อแยกส่วนประกอบและ / หรือหยุดสคริปต์หากไม่ตรงตามเงื่อนไขบางประการ @RK ชี้ให้เห็นว่า ArcGIS python console นั้นไร้ค่าสำหรับการรันสคริปต์ที่ซับซ้อนและในทางปฏิบัติควรสงวนไว้สำหรับการดำเนินการอย่างง่าย - ติดกับIDLE , pythonwin , pyscripterหรือโฮสต์อื่น ๆ ของ IDE นี่คือการสนทนาที่เกี่ยวข้องกับคำถามของคุณ:

ฉันจะใช้ sys.exit (0) ในสคริปต์ arcpy เพื่อออกก่อนได้อย่างไรโดยไม่มีข้อผิดพลาดปรากฏขึ้น

การยกเลิกสคริปต์ Python

วิธีหยุดคำสั่งหรือพรอมต์ใน Python


1
และแน่นอนว่าด้วย IDE เช่น PyScripter คุณสามารถเพิ่มคำสั่ง "จุดพัก" ที่คำสั่ง "for ... range" ของคุณรันสคริปต์ใน "โหมดดีบัก" และ IDE จะ "หยุด" โดยอัตโนมัติพร้อมกัน ชี้ไปที่ระหว่างกระบวนการวนซ้ำและอนุญาตให้คุณตรวจสอบผลลัพธ์ที่ได้รับการประมวลผลแล้ว
RyanKDalton-OffTheGridMaps

2

ฉันทำงานใน 10.4 และฉันพบว่าฉันสามารถคลิกปิด X ป้อนคำอธิบายรูปภาพที่นี่ในขณะที่สคริปต์กำลังทำงานอยู่ ArcMap จะถามฉันว่าฉันต้องการยกเลิกการดำเนินการหรือไม่

ป้อนคำอธิบายรูปภาพที่นี่

ฉันคลิกใช่ ArcMap ถามฉันว่าฉันต้องการบันทึกก่อนออกหรือไม่ ฉันคลิกยกเลิก สคริปต์พ่นแป้นพิมพ์ขัดจังหวะ


คุณคลิกปุ่มปิดอันใดเพื่อกระตุ้นการกระทำนี้
Alex Essilfie

windows red X ที่มุมขวาบนของซอฟต์แวร์ windows (all?) ส่วนใหญ่ ดูรูปเล็ก ๆ ในคำตอบของฉัน
Emil Brundage

1

ถ้าคุณต้องการที่จะแก้ในแบบ pythonic ลองสิ่งนี้:

import sys
sys.exit()

หรือใช้:

raise SystemExit()

ในรายละเอียด:

import time
import sys

sTime= time.time()

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

ฉันหวังว่ามันจะช่วยคุณ ...


ไม่นี่ไม่ใช่สิ่งที่ฉันต้องการ ฉันต้องการที่จะหยุดกระบวนการในเวลาใดที่ฉันต้องการโดยการกดแป้นพิมพ์พร้อมกันการคลิกปุ่มหรือสิ่งที่คล้ายกันในขณะที่รหัสฉันมีการป้อนข้อมูลในหน้าต่างคอนโซลที่กำลังทำงาน ฉันรู้sys.exit()แต่ไม่ทำงานเมื่อมีการวนซ้ำหรือกระบวนการที่มีความยาวคล้ายกัน
Alex Essilfie

@Upvoters:นี่ไม่ใช่คำตอบที่ฉันต้องการ มันไม่ได้ตอบคำถามของฉัน ฉันต้องการหยุดการทำงานของคำสั่ง (โดยทั่วไปคือการวนซ้ำ) โดยการกดแป้นพิมพ์ร่วมกันหรือคลิกปุ่มหรือสิ่งที่คล้ายกัน
Alex Essilfie

1

อย่างน้อยใน ArcMap 10.4 คุณสามารถทำได้ ตรวจสอบให้แน่ใจว่าหน้าต่าง "ผลลัพธ์" ปรากฏขึ้น (หากไม่พบภายใต้ "การประมวลผลทางภูมิศาสตร์") ตอนนี้ถ้าคุณมีคำสั่งที่ใช้มันจะปรากฏขึ้นในหน้าต่างนี้ คลิกขวาที่มันและกด "ยกเลิก"



0

ใช้ IDLE ฉันมีไฟล์ชื่อ "stop.py" ซึ่งมีบรรทัดเดียว: "pass" ให้ไฟล์นี้เปิดใน IDLE ในขณะที่สคริปต์. py กำลังทำงานอยู่ การคลิก F5 ในหน้าต่าง "stop.py" จะรีเซ็ต IDLE

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.