Mantener abierto PowerShell después de CTRL-BREAK

10

Estoy trabajando con Python Django en Windows Vista Powershell. Después de correr python manage.py runserver, me pide CTRL-BREAKque detenga el proceso. Pero después de escribir eso, Powershell detiene el proceso y se cierra. ¿Hay alguna manera de detener el proceso y mantener abierto el Powershell?

GTyler
fuente
Este valor predeterminado de django-windows es terrible por muchas razones (como el hecho de que muchas computadoras portátiles e incluso el teclado virtual incorporado no tienen una tecla de interrupción). Desearía poder encontrar una solución alternativa.
Mortoc
Python a menudo miente sobre qué hacer para salir / detener un proceso. Pero puede probar otras CTRL- <opciones>. Por ejemplo: CTRL-C / Z / D
not2qubit
@ user1147688 ctrl + break mata instantáneamente al intérprete de python en windows mientras que ctrl + c puede ser capturado o ignorado.
Smit Johnth

Respuestas:

3

Desafortunadamente, el host de la consola PowerShell utiliza Ctrl+Cpara finalizar una operación en curso y Ctrl+Breakfinaliza la operación Y cierra la sesión del host. Es una elección muy desafortunada en mi humilde opinión, pero está allí y podemos vivir con ella.

Creo que lo más fácil de hacer cuando me encuentro con situaciones como esta es desde la sesión de PowerShell, simplemente ejecutar cmddesde el indicador de PowerShell. Ahora en realidad estoy pasando por alto PowerShell temporalmente y, cuando termine, vuelvo fácilmente a mi sesión de PowerShell.

La otra cosa que probablemente debería considerar es usar cmd.exe en lugar de PowerShell a menos que haya alguna característica de PowerShell que esté tratando de aprovechar.

Greg Wojan
fuente
1

Puedes probarlo de esta manera:

  1. Su PowerShell lanza su programa Python en un trabajo

  2. Trampa Ctrl-C por el proceso principal de PowerShell

  3. Cuando Ctrl-C esté atrapado, detenga el trabajo iniciado en el paso 1

Luego, puede mantener su secuencia de comandos de PowerShell continua

  1. Para iniciar un trabajo en segundo plano, use start-job

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

  2. Para atrapar Ctrl-C, dígale a su consola que trate a Ctrl-C como una entrada, verifíquelo desde MSTN .

    [consola] :: TreatControlCAsInput = $ true

Luego ejecute un bucle UI para verificar la entrada de claves:

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. Para detener el trabajo cuando se presiona "Ctrl-C",

    parar-trabajo-trabajo $ killMe

Sin embargo, la vida no será fácil si necesita interactuar con su servidor Python, que se ejecuta en segundo plano. Y probablemente le gustaría mostrar la salida de su servidor constantemente.

chingNotCHing
fuente