เปิด PowerShell ค้างไว้หลังจาก CTRL-BREAK


10

ฉันกำลังทำงานกับ Python Django ใน Windows Vista Powershell หลังจากที่ฉันทำงานpython manage.py runserverฉันCTRL-BREAKจะหยุดกระบวนการ แต่หลังจากที่ฉันพิมพ์ Powershell หยุดกระบวนการและปิด มีวิธีหยุดกระบวนการและเปิด Powershell ไว้หรือไม่


ค่าเริ่มต้นของ django-windows นั้นแย่มากด้วยเหตุผลหลายประการ (เช่นความจริงที่ว่าแล็ปท็อปจำนวนมากและแม้แต่คีย์บอร์ดเสมือนในตัวไม่มีคีย์หยุด) ฉันหวังว่าฉันจะหางานทำ
Mortoc

Python มักจะอยู่กับสิ่งที่ต้องทำเพื่อออกจาก / หยุดกระบวนการ แต่คุณสามารถลอง CTRL- <options> อื่น ๆ ตัวอย่างเช่น: CTRL-C / Z / D
not2qubit

@ user1147688 ctrl + หยุดทันทีฆ่าล่ามไพ ธ อนบน windows ในขณะที่ ctrl + c สามารถถูกดักจับหรือเพิกเฉยได้
Smit Johnth

คำตอบ:


3

น่าเสียดายที่โฮสต์คอนโซล PowerShell ใช้Ctrl+Cเพื่อยกเลิกการดำเนินการต่อเนื่องและCtrl+Breakยุติการดำเนินการและปิดเซสชันโฮสต์ มันเป็นตัวเลือกที่โชคร้ายที่สุด แต่มันอยู่ที่นั่นและเราจะอยู่กับมัน

ฉันพบสิ่งที่ง่ายที่สุดที่ต้องทำเมื่อพบเจอกับสถานการณ์เช่นนี้จากเซสชัน PowerShell เพียงดำเนินการcmdจากพรอมต์ PowerShell ตอนนี้ฉันกำลังข้าม PowerShell ชั่วคราวและฉันกลับไปที่ PowerShell ของฉันเมื่อเสร็จแล้ว

สิ่งอื่นที่คุณควรพิจารณาคือการใช้cmd.exeมากกว่า PowerShell เว้นแต่ว่ามีคุณสมบัติบางอย่างของ PowerShell ที่คุณพยายามจะใช้ประโยชน์


1

คุณสามารถลองด้วยวิธีนี้:

  1. PowerShell ของคุณเปิดตัวโปรแกรม python ของคุณในงาน

  2. Trap Ctrl-C โดยกระบวนการหลัก PowerShell

  3. เมื่อ Ctrl-C ติดกับดักให้หยุดงานที่เรียกใช้ในขั้นตอนที่ 1

จากนั้นคุณสามารถให้สคริปต์ PowerShell ของคุณดำเนินต่อไปได้

  1. ในการเปิดใช้งานพื้นหลังให้ใช้งานเริ่มต้น

    $ killMe = start-job -scriptblock {& python Manage.py}

  2. เพื่อดักจับ Ctrl-C, บอกคอนโซลของคุณในการรักษา Ctrl-C เป็น input ตรวจสอบนี้จาก MSTN

    [คอนโซล] :: TreatControlCAsInput = $ true

จากนั้นเรียกใช้การวนรอบ UI เพื่อตรวจสอบอินพุตของคีย์:

while ($true) {

  write-host "Processing..."
  if ([console]::KeyAvailable) {

    $key = [system.console]::readkey($true)
    if (($key.modifiers -band [consolemodifiers]"control") -and
      ($key.key -eq "C")) {

      :
      break
    }
  }
}
:
  1. หากต้องการหยุดงานเมื่อกดปุ่ม "Ctrl-C"

    หยุดงาน -job $ killMe

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

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