Windows Vista PowershellでPython Djangoを使用しています。を実行すると、プロセスを停止するpython manage.py runserver
ように求められCTRL-BREAK
ます。しかし、それを入力した後、Powershellはプロセスを停止して閉じます。プロセスを停止してPowershellを開いたままにする方法はありますか?
Windows Vista PowershellでPython Djangoを使用しています。を実行すると、プロセスを停止するpython manage.py runserver
ように求められCTRL-BREAK
ます。しかし、それを入力した後、Powershellはプロセスを停止して閉じます。プロセスを停止してPowershellを開いたままにする方法はありますか?
回答:
残念ながら、PowerShellコンソールホストはCtrl+C
進行中の操作を終了するために使用し、操作をCtrl+Break
終了し、ホストセッションを閉じます。これは最も不幸な選択です私見ですが、それはそこにあり、私たちはそれとともに生きることができます。
このような状況に遭遇したときに実行する最も簡単なことは、PowerShellセッションcmd
から、PowerShellプロンプトから実行するだけです。現在、私は実際には一時的にPowerShellをバイパスしており、完了すると簡単にPowerShellセッションに戻ります。
検討すべきもう1つのことは、活用しようとしているPowerShellの機能がない限り、PowerShellではなくcmd.exeを使用することです。
あなたはこの方法でそれを試すかもしれません:
あなたのpowershellはあなたのpythonプログラムをジョブで起動します
powershellメインプロセスでCtrl-Cをトラップする
Ctrl-Cがトラップされたら、ステップ1で起動したジョブを停止します
次に、PowerShellスクリプトを続行します
バックグラウンドジョブを起動するには、start-jobを使用します。
$ killMe = start-job -scriptblock {&python manage.py}
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
}
}
}
:
「Ctrl-C」を押したときにジョブを停止するには、
stop-job -job $ killMe
ただし、バックグラウンドで実行されているPythonサーバーとやり取りする必要がある場合、人生は簡単ではありません。また、サーバーの出力を常に表示したいと思うでしょう。