Menjaga PowerShell Terbuka setelah CTRL-BREAK

10

Saya bekerja dengan Python Django di Windows Vista Powershell. Setelah saya berlari python manage.py runserver, ia meminta saya CTRL-BREAKuntuk menghentikan proses. Tetapi setelah saya mengetik itu, Powershell menghentikan proses dan menutup. Apakah ada cara untuk menghentikan proses dan menjaga Powershell terbuka?

GTyler
sumber
Default django-windows ini mengerikan karena banyak alasan (seperti fakta bahwa banyak laptop dan bahkan keyboard virtual bawaan tidak memiliki tombol istirahat). Saya berharap dapat menemukan solusi.
Mortoc
Python sering berbohong tentang apa yang harus dilakukan untuk keluar / menghentikan suatu proses. Tetapi Anda dapat mencoba CTRL- <pilihan> lainnya. Misalnya: CTRL-C / Z / D
not2qubit
@ user1147688 ctrl + break langsung membunuh penerjemah python di windows sementara ctrl + c dapat ditangkap atau diabaikan.
Smit Johnth

Jawaban:

3

Sayangnya host konsol PowerShell menggunakan Ctrl+Cuntuk menghentikan operasi yang sedang berlangsung dan Ctrl+Breakmengakhiri operasi DAN menutup sesi host. Ini adalah pilihan IMHO yang paling disayangkan tetapi ada di sana dan kita bisa hidup dengannya.

Saya menemukan hal termudah untuk dilakukan ketika saya mengalami situasi seperti ini adalah dari sesi PowerShell cukup jalankan cmddari prompt PowerShell. Sekarang saya benar-benar melewati PowerShell sementara dan saya mudah kembali ke sesi PowerShell saya setelah selesai.

Hal lain yang mungkin harus Anda pertimbangkan adalah menggunakan cmd.exe daripada PowerShell kecuali ada beberapa fitur PowerShell yang Anda coba manfaatkan.

Greg Wojan
sumber
1

Anda dapat mencobanya dengan cara ini:

  1. PowerShell Anda meluncurkan program python Anda dalam suatu pekerjaan

  2. Perangkap Ctrl-C dengan proses utama PowerShell

  3. Ketika Ctrl-C terjebak, hentikan pekerjaan yang diluncurkan di langkah 1

Kemudian, Anda dapat membuat skrip PowerShell Anda berlanjut

  1. Untuk meluncurkan pekerjaan latar belakang, gunakan pekerjaan mulai

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

  2. Untuk menjebak Ctrl-C, beri tahu konsol Anda untuk memperlakukan Ctrl-C sebagai input, periksa ini dari MSTN .

    [konsol] :: TreatControlCAsInput = $ true

Kemudian jalankan loop UI untuk memeriksa input kunci:

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. Untuk menghentikan pekerjaan ketika "Ctrl-C" dipukul,

    stop-job -job $ killMe

Namun, hidup tidak akan mudah jika Anda perlu berinteraksi dengan server python Anda, yang berjalan di latar belakang. Dan Anda mungkin ingin menampilkan output server Anda terus-menerus.

chingNotCHing
sumber