Mantenere PowerShell aperto dopo CTRL-BREAK


10

Sto lavorando con Python Django in Windows Vista Powershell. Dopo l'esecuzione python manage.py runserver, mi chiede CTRL-BREAKdi interrompere il processo. Ma dopo averlo digitato, Powershell interrompe il processo e si chiude. C'è un modo per interrompere il processo e mantenere aperta la Powershell?


Questa impostazione predefinita di django-windows è terribile per molte ragioni (come il fatto che molti laptop e persino la tastiera virtuale integrata non hanno un tasto di interruzione). Vorrei poter trovare una soluzione.
Mortoc,

Python spesso mente su cosa fare per uscire / arrestare un processo. Ma puoi provare altri CTRL- <opzioni>. Ad esempio: CTRL-C / Z / D
not2qubit,

@ user1147688 ctrl + break uccide istantaneamente l'interprete Python su Windows mentre ctrl + c può essere catturato o ignorato.
Smit Johnth,

Risposte:


3

Sfortunatamente l'host della console di PowerShell utilizza Ctrl+Cper terminare un'operazione in corso e Ctrl+Breaktermina l'operazione E chiude la sessione host. È una scelta davvero sfortunata, ma è lì e possiamo conviverci.

Trovo che la cosa più semplice da fare quando mi imbatto in situazioni come questa sia dalla sessione di PowerShell che esegua semplicemente cmddal prompt di PowerShell. Ora sto effettivamente bypassando temporaneamente PowerShell e al termine sono facilmente tornato alla mia sessione di PowerShell.

L'altra cosa probabilmente si dovrebbe prendere in considerazione è utilizzare cmd.exe piuttosto che PowerShell a meno che non ci sia qualche caratteristica di PowerShell si sta cercando di leva.


1

Puoi provarlo in questo modo:

  1. Il tuo PowerShell avvia il tuo programma Python in un lavoro

  2. Trap Ctrl-C dal processo principale di PowerShell

  3. Quando Ctrl-C è intrappolato, interrompere il lavoro avviato nel passaggio 1

Quindi, puoi continuare a continuare lo script PowerShell

  1. Per avviare un processo in background, utilizzare start-job

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

  2. Per intercettare Ctrl-C, dì alla tua console di trattare Ctrl-C come input, controlla questo da MSTN .

    [console] :: TreatControlCAsInput = $ true

Quindi eseguire un ciclo dell'interfaccia utente per controllare l'immissione dei tasti:

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. Per interrompere il lavoro quando viene premuto "Ctrl-C",

    stop-job -job $ killMe

Tuttavia, la vita non sarà facile se devi interagire con il tuo server Python, che è in esecuzione in background. E probabilmente vorresti visualizzare costantemente l'output del tuo server.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.