Я работаю с Python Django в Windows Vista Powershell. После запуска python manage.py runserver
он просит CTRL-BREAK
остановить процесс. Но после того, как я напечатал это, Powershell останавливает процесс и закрывается. Есть ли способ остановить процесс и оставить Powershell открытым?
2 ответа
К сожалению, консольный хост PowerShell использует Ctrl+C
для завершения текущей операции, а Ctrl+Break
завершает операцию И закрывает сеанс хоста. Это самый неудачный выбор, ИМХО, но он есть, и мы можем с этим жить.
Я считаю, что самое простое, когда я сталкиваюсь с подобными ситуациями, из сеанса PowerShell - просто выполнить cmd
из командной строки PowerShell. Теперь я фактически временно обхожу PowerShell и легко возвращаюсь к своему сеансу PowerShell после завершения.
Другая вещь, которую вы, вероятно, должны рассмотреть, это использовать cmd.exe, а не PowerShell, если только вы не пытаетесь использовать какую-то особенность PowerShell.
Вы можете попробовать это следующим образом:
Ваш PowerShell запускает вашу программу Python в работе
Ловушка Ctrl-C основным процессом powershell
Когда Ctrl-C захвачен, остановите задание, запущенное на шаге 1
Затем вы можете продолжить выполнение сценария PowerShell.
Чтобы запустить фоновое задание, используйте start-job
$ killMe = start-job -scriptblock {& python manage.py}
Чтобы перехватить Ctrl-C, попросите консоль обрабатывать Ctrl-C как ввод, проверьте это из MSTN.
[console]::TreatControlCAsInput = $ true
Затем запустите цикл пользовательского интерфейса для проверки ввода ключей:
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, который работает в фоновом режиме. И вы, вероятно, хотели бы постоянно отображать вывод вашего сервера.