Тримання PowerShell відкрито після CTRL-BREAK


10

Я працюю з Python Django в Windows Vista Powershell. Після того, як я забігаю python manage.py runserver, він просить CTRL-BREAKприпинити процес. Але після того, як я це набрав, Powershell зупиняє процес і закривається. Чи є спосіб зупинити процес і тримати відкриту владу?


Цей django-windows за замовчуванням страшний з багатьох причин (як, наприклад, те, що багато ноутбуків і навіть вбудована віртуальна клавіатура не мають клавіші перерви). Я б хотів, щоб я міг знайти обхід.
Морток

Python часто бреше про те, що робити для виходу / зупинки процесу. Але ви можете спробувати інші CTRL- <варіанти>. Наприклад: CTRL-C / Z / D
not2qubit

@ user1147688 ctrl + break миттєво вбиває інтерпретатора python у Windows, тоді як ctrl + c може бути схоплено або проігноровано.
Smit Johnth

Відповіді:


3

На жаль, хост консолі PowerShell використовує Ctrl+Cдля припинення поточної операції та Ctrl+Breakприпиняє операцію І закриває сеанс хоста. Це самий невдалий вибір IMHO, але він є, і ми маємо жити з цим.

Мені здається, що найпростіше зробити, коли я стикаюся з такими ситуаціями, як це з сеансу PowerShell, просто виконати cmdз підказки PowerShell. Тепер я фактично минаю PowerShell тимчасово, і я легко повертаюся до моєї сесії PowerShell, коли закінчу.

Інша річ, яку ви, мабуть, повинні врахувати - це використання cmd.exe, а не PowerShell, якщо немає якоїсь функції PowerShell, яку ви намагаєтеся використовувати.


1

Ви можете спробувати таким чином:

  1. Ваша повноваження запускає вашу програму python у роботі

  2. Відключіть Ctrl-C основним процесом повноважень

  3. Коли Ctrl-C потрапить у пастку, зупиніть роботу, запущену на кроці 1

Потім ви можете продовжувати продовжувати роботу сценарію

  1. Щоб запустити фонове завдання, використовуйте start-task

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

  2. Щоб захопити 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
    }
  }
}
:
  1. Щоб припинити роботу при натисканні "Ctrl-C",

    стоп-робота - робота $ killMe

Однак життя не буде легким, якщо вам потрібно буде взаємодіяти з вашим сервером python, який працює на задньому плані. І ви, мабуть, хотіли б постійно відображати результати свого сервера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.