Garder PowerShell ouvert après CTRL-BREAK

10

Je travaille avec Python Django dans Windows Vista Powershell. Après avoir couru python manage.py runserver, il me demande CTRL-BREAKd'arrêter le processus. Mais après avoir tapé cela, Powershell arrête le processus et se ferme. Existe-t-il un moyen d'arrêter le processus et de garder le Powershell ouvert?

GTyler
la source
Cette valeur par défaut de django-windows est terrible pour de nombreuses raisons (comme le fait que de nombreux ordinateurs portables et même le clavier virtuel intégré n'ont pas de touche de pause). J'aimerais pouvoir trouver une solution.
Mortoc
Python ment souvent sur ce qu'il faut faire pour quitter / arrêter un processus. Mais vous pouvez essayer d'autres CTRL- <options>. Par exemple: CTRL-C / Z / D
not2qubit
@ user1147688 ctrl + break tue instantanément l'interpréteur python sur windows tandis que ctrl + c peut être intercepté ou ignoré.
Smit Johnth

Réponses:

3

Malheureusement, l'hôte de la console PowerShell utilise Ctrl+Cpour mettre fin à une opération en cours et Ctrl+Breakmet fin à l'opération ET ferme la session hôte. C'est un choix des plus regrettables à mon humble avis, mais il est là et nous pouvons vivre avec.

Je trouve que la chose la plus simple à faire lorsque je rencontre des situations comme celle-ci est de la session PowerShell, exécutez simplement à cmdpartir de l'invite PowerShell. Maintenant, je contourne PowerShell temporairement et je reviens facilement à ma session PowerShell une fois terminé.

L'autre chose que vous devriez probablement envisager est d'utiliser cmd.exe plutôt que PowerShell, sauf s'il existe une fonctionnalité de PowerShell que vous essayez d'exploiter.

Greg Wojan
la source
1

Vous pouvez l'essayer de cette façon:

  1. Votre PowerShell lance votre programme Python dans un job

  2. Piège Ctrl-C par le processus principal PowerShell

  3. Lorsque Ctrl-C est piégé, arrêtez le travail lancé à l'étape 1

Ensuite, vous pouvez continuer à poursuivre votre script PowerShell

  1. Pour lancer une tâche en arrière-plan, utilisez start-job

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

  2. Pour intercepter Ctrl-C, dites à votre console de traiter Ctrl-C comme une entrée, vérifiez cela à partir de MSTN .

    [console] :: TreatControlCAsInput = $ true

Exécutez ensuite une boucle d'interface utilisateur pour vérifier la saisie des clés:

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. Pour arrêter le travail lorsque le "Ctrl-C" est frappé,

    stop-job -job $ killMe

Cependant, la vie ne sera pas facile si vous devez interagir avec votre serveur python, qui s'exécute en arrière-plan. Et vous aimeriez probablement afficher constamment la sortie de votre serveur.

chingNotCHing
la source