จะหยุด / ยุติสคริปต์ python ไม่ให้ทำงานได้อย่างไร


106

ฉันเขียนโปรแกรมใน IDLE เพื่อโทเค็นไฟล์ข้อความและมันเริ่มเป็นไฟล์ข้อความ tokeniza 349! ฉันจะหยุดมันได้อย่างไร ฉันจะหยุดโปรแกรม Python ที่กำลังทำงานอยู่ได้อย่างไร


5
ctrl+cควรฆ่ามัน อีกวิธีหนึ่งคือkill -9มัน
xbonez

1
คำตอบมากมายที่นี่เป็นคำตอบเฉพาะแพลตฟอร์ม ค้นหาแพลตฟอร์มของคุณ (Windows, Linux, Mac, อย่างอื่น?)
tripleee

คำตอบ:


60

หากต้องการหยุดโปรแกรมของคุณเพียงแค่กด+Control C


26
วิธีนี้ใช้ได้กับแล็ปท็อป windows ของฉัน แต่บนเดสก์ท็อป linux ของฉันมันแสดง^Cในเทอร์มินัลและการตรวจสอบระบบแสดงให้เห็นว่า python ยังคงใช้ CPU จำนวนมาก ...
user3768495

เป็นไปได้ไหมที่จะเริ่มต้นสคริปต์ต่อหลังจากหยุดแล้ว
Gathide

11
@Gathide หากคุณต้องการหยุดกระบวนการชั่วคราวและวางไว้ในพื้นหลังให้กดCtrl + Z(อย่างน้อยบน Linux) แล้วถ้าคุณต้องการที่จะฆ่ามันวิ่งkill %nที่ "n" คือจำนวนที่คุณได้ถัดจาก "หยุด" Ctrl + Zเมื่อคุณกด fgหากคุณต้องการที่จะกลับมามันทำงาน
cluxter

1
ใช้งานไม่ได้ถ้าคุณมีข้อยกเว้นทั่วไปในโปรแกรม ข้อยกเว้น: จับการขัดจังหวะทำบางสิ่งบางอย่าง (หรือไม่) จากนั้นโปรแกรมจะดำเนินต่อไปอย่างสนุกสนาน
DragonLord

@DragonLord ทั่วไปของคุณยกเว้นควรมีข้อผิดพลาดพิเศษยกเว้น Ctrl + C อย่างไรก็ตามข้อยกเว้นทั่วไปมักจะท้อแท้
Pere

130

คุณสามารถทำได้หากคุณใช้exit()ฟังก์ชันในโค้ดของคุณ sys.exit()เพิ่มเติมความนึกคิดที่คุณสามารถทำได้ sys.exit()ซึ่งอาจยุติ Python แม้ว่าคุณจะเรียกใช้สิ่งต่าง ๆ แบบขนานผ่านmultiprocessingแพ็คเกจ

หมายเหตุ: ในการใช้งานsys.exit()คุณต้องนำเข้า:import sys


8
หมายเหตุ: ฉันพบตัวอย่างที่sys.exit(1)ไม่หยุดกระบวนการนี้ Popenฉันโดยทั่วไปมีหลายหัวข้อและแต่ละของพวกเขาบล็อกบนกระบวนการภายนอกที่ตั้งขึ้นโดย ฉันต้องการตัวเลือกนิวเคลียร์เพื่อฆ่ากระบวนการย่อยทั้งหมดที่สร้างโดยกระบวนการ Python รวมทั้งกระบวนการ Python เอง ไม่พบเลย
Dici

sys.exit () ไม่ฆ่ากระบวนการ แต่เพิ่ม SystemExit Exception ซึ่งไม่หยุดการดำเนินการโดยปิดโปรแกรม
c24b

39

หากโปรแกรมของคุณกำลังทำงานที่คอนโซลแบบโต้ตอบให้กดCTRL+Cจะทำให้เกิดKeyboardInterruptข้อยกเว้นในเธรดหลัก

หากโปรแกรม Python ของคุณไม่สามารถจับมันได้ก็KeyboardInterruptจะทำให้ Python ออก อย่างไรก็ตามexcept KeyboardInterrupt:บล็อกหรือสิ่งที่คล้ายเปล่าexcept:จะป้องกันไม่ให้กลไกนี้หยุดการทำงานของสคริปต์จริงๆ

บางครั้งหากKeyboardInterruptใช้งานไม่ได้คุณสามารถส่งSIGBREAKสัญญาณแทน บน Windows CTRL+ Pause/Breakอาจถูกจัดการโดยล่ามโดยไม่สร้างKeyboardInterruptข้อยกเว้นที่จับได้

อย่างไรก็ตามกลไกเหล่านี้ส่วนใหญ่จะทำงานก็ต่อเมื่อตัวแปล Python ทำงานและตอบสนองต่อเหตุการณ์ของระบบปฏิบัติการ หากล่าม Python ไม่ตอบสนองด้วยเหตุผลบางประการวิธีที่มีประสิทธิภาพที่สุดคือยุติกระบวนการของระบบปฏิบัติการทั้งหมดที่กำลังเรียกใช้ล่าม กลไกสำหรับสิ่งนี้แตกต่างกันไปตามระบบปฏิบัติการ

ในสภาพแวดล้อมเชลล์แบบ Unix คุณสามารถกดCTRL+ Zเพื่อระงับกระบวนการใดก็ตามที่กำลังควบคุมคอนโซลอยู่ เมื่อคุณได้รับเปลือกกลับพร้อมท์คุณสามารถใช้งานรายการระงับและคุณสามารถฆ่างานแรกที่ถูกระงับด้วยjobs kill %1(หากคุณต้องการเริ่มการทำงานอีกครั้งคุณสามารถทำงานต่อในเบื้องหน้าได้โดยใช้fg %1; อ่านคู่มือการควบคุมงานของเชลล์สำหรับข้อมูลเพิ่มเติม)

หรือในสภาพแวดล้อมแบบ Unix หรือ Unix คุณสามารถค้นหา PID ของกระบวนการ Python (ตัวระบุกระบวนการ) และฆ่าโดย PID ใช้บางอย่างเช่นps aux | grep pythonค้นหากระบวนการ Python ที่กำลังทำงานอยู่จากนั้นใช้kill <pid>เพื่อส่งSIGTERMสัญญาณ

killคำสั่งบนระบบปฏิบัติการยูนิกซ์ส่งSIGTERMโดยค่าเริ่มต้นและโปรแกรมหลามสามารถติดตั้งจัดการสัญญาณสำหรับSIGTERMใช้signalโมดูล ตามทฤษฎีแล้วตัวจัดการสัญญาณใด ๆSIGTERMควรปิดกระบวนการอย่างสง่างาม แต่บางครั้งหากกระบวนการติดขัด (เช่นถูกบล็อกในสถานะสลีป IO ที่ไม่ถูกขัดจังหวะ) SIGTERMสัญญาณจะไม่มีผลเนื่องจากกระบวนการไม่สามารถปลุกขึ้นมาเพื่อจัดการได้

ในการบังคับให้ฆ่ากระบวนการที่ไม่ตอบสนองต่อสัญญาณคุณต้องส่งSIGKILLสัญญาณซึ่งบางครั้งเรียกว่าkill -9เพราะ9เป็นค่าตัวเลขของค่าSIGKILLคงที่ จากบรรทัดคำสั่งคุณสามารถใช้kill -KILL <pid>(หรือเรียกkill -9 <pid>สั้น ๆ ) เพื่อส่งSIGKILLและหยุดกระบวนการทำงานทันที

ใน Windows คุณไม่มีระบบ Unix ของสัญญาณกระบวนการ แต่คุณสามารถบังคับยุติกระบวนการที่กำลังทำงานอยู่ได้โดยใช้TerminateProcessฟังก์ชัน วิธีที่ง่ายที่สุดในการโต้ตอบคือการเปิดตัวจัดการงานค้นหาpython.exeกระบวนการที่ตรงกับโปรแกรมของคุณแล้วคลิกปุ่ม "สิ้นสุดกระบวนการ" คุณยังสามารถใช้taskkillคำสั่งเพื่อวัตถุประสงค์ที่คล้ายกัน


34
  • Ctrl + Cหากต้องการหยุดสคริปต์หลามเพียงแค่กด
  • ภายในสคริปต์ด้วยexit()คุณสามารถทำได้
  • คุณสามารถทำได้ในสคริปต์แบบโต้ตอบเพียงออก
  • คุณสามารถใช้pkill -f name-of-the-python-script.

1
ตัวเลือกสุดท้ายมีประโยชน์อย่างยิ่งเมื่อคุณเรียกใช้สคริปต์ในโหมดแยกเดี่ยวเช่นpython script.py&
richar8086

27

หากต้องการหยุดโปรแกรมที่กำลังทำงานอยู่ให้ใช้Ctrl+ Cเพื่อยุติกระบวนการ

ในการจัดการโดยใช้โปรแกรมใน python ให้นำเข้าsysโมดูลและใช้ในsys.exit()ตำแหน่งที่คุณต้องการยุติโปรแกรม

import sys
sys.exit()

26

Ctrl-Break มีประสิทธิภาพมากกว่าCtrl-C


4
เช่นเดียวกับที่ Daniel Pryden ชี้แจงในคำตอบของเขาปุ่ม Break บนแป้นพิมพ์อาจมีข้อความว่า Pause สำหรับผู้ที่สับสนเช่นฉัน :)
JakeStrang

19

ในการหยุดสคริปต์ python โดยใช้แป้นพิมพ์: Ctrl+C

หากต้องการหยุดใช้รหัส (สิ่งนี้ใช้ได้ผลกับฉันใน Python 3):

import os
os._exit(0)

คุณยังสามารถใช้:

import sys
sys.exit()

หรือ:

exit()

หรือ:

raise SystemExit

4

Ctrl + Z ควรทำหากคุณติดอยู่ในไพ ธ อนเชลล์ โปรดทราบว่าอินสแตนซ์ของสคริปต์สามารถทำงานต่อไปในพื้นหลังได้ดังนั้นใน linux คุณต้องฆ่ากระบวนการที่เกี่ยวข้อง


สิ่งนี้มีประโยชน์เมื่อเรียกใช้กระบวนการแบบขนาน (หลาย ๆ ) และ CTRL-C จะไม่ฆ่าพวกมันทั้งหมด หลังจาก CTRL-Z คุณสามารถตรวจสอบjobsหรือpsเลือกkill 8923754รหัสงาน / กระบวนการใด ๆ ที่คุณต้องการเพื่อฆ่า
พอล

3

เมื่อฉันมีสคริปต์ python ที่ทำงานบนเทอร์มินัล linux CTRL + \ ทำงาน (ไม่ใช่ CRTL + C หรือ D)


3

Control+ ใช้Dงานได้สำหรับฉันใน Windows 10 นอกจากนี้การวางexit()ในตอนท้ายก็ใช้ได้เช่นกัน





0

กดCtrl+ Alt+ Deleteและตัวจัดการงานจะปรากฏขึ้น ค้นหาคำสั่ง Python ที่กำลังทำงานอยู่คลิกขวาที่คำสั่งแล้วคลิกหยุดหรือฆ่า


0

หากคุณกำลังทำงานกับ Spyder ให้ใช้CTRL + (DOT)และคุณจะรีสตาร์ทเคอร์เนลและคุณจะหยุดโปรแกรม


0

โซลูชัน Windows: Control + C.

โซลูชัน Macbook: Control (^) + C.

อีกวิธีหนึ่งคือเปิดเทอร์มินัลพิมพ์topเขียนPIDกระบวนการที่คุณต้องการฆ่าแล้วพิมพ์บนเทอร์มินัล:kill -9 <pid>

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