CTRL-BREAK後もPowerShellを開いたままにする


10

Windows Vista PowershellでPython Djangoを使用しています。を実行すると、プロセスを停止するpython manage.py runserverように求められCTRL-BREAKます。しかし、それを入力した後、Powershellはプロセスを停止して閉じます。プロセスを停止してPowershellを開いたままにする方法はありますか?


このdjango-windowsのデフォルトは、さまざまな理由でひどいものです(多くのラップトップや組み込みの仮想キーボードでさえBreakキーがないという事実など)。回避策が見つかればいいのですが。
Mortoc 2013

Pythonはしばしば、プロセスを終了/停止するために何をすべきかについて嘘をつきます。ただし、他のCTRL- <options>を試すこともできます。例:CTRL-C / Z / D
not2qubit

@ user1147688 ctrl + breakを押すと、ctrl + cをキャッチまたは無視できるのに、ウィンドウのpythonインタープリターが即座に強制終了されます。
Smit Johnth、2015年

回答:


3

残念ながら、PowerShellコンソールホストはCtrl+C進行中の操作を終了するために使用し、操作をCtrl+Break終了し、ホストセッションを閉じます。これは最も不幸な選択です私見ですが、それはそこにあり、私たちはそれとともに生きることができます。

このような状況に遭遇したときに実行する最も簡単なことは、PowerShellセッションcmdから、PowerShellプロンプトから実行するだけです。現在、私は実際には一時的にPowerShellをバイパスしており、完了すると簡単にPowerShellセッションに戻ります。

検討すべきもう1つのことは、活用しようとしているPowerShellの機能がない限り、PowerShellではなくcmd.exeを使用することです。


1

あなたはこの方法でそれを試すかもしれません:

  1. あなたのpowershellはあなたのpythonプログラムをジョブで起動します

  2. powershellメインプロセスでCtrl-Cをトラップする

  3. Ctrl-Cがトラップされたら、ステップ1で起動したジョブを停止します

次に、PowerShellスクリプトを続行します

  1. バックグラウンドジョブを起動するには、start-jobを使用します。

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

  2. Ctrl-Cをトラップするには、Ctrl-Cを入力として扱うようにコンソールに指示します。これを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」を押したときにジョブを停止するには、

    stop-job -job $ killMe

ただし、バックグラウンドで実行されているPythonサーバーとやり取りする必要がある場合、人生は簡単ではありません。また、サーバーの出力を常に表示したいと思うでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.