在CTRL-BREAK之后保持PowerShell打开


10

我正在Windows Vista Powershell中使用Python Django。运行后python manage.py runserver,它要求我CTRL-BREAK停止该过程。但是,在键入之后,Powershell将停止该过程并关闭。有没有办法停止该过程并保持Powershell打开?


django-windows的默认设置很糟糕,原因有很多(例如许多笔记本电脑甚至内置的虚拟键盘都没有断键的事实)。我希望我能找到一种解决方法。
Mortoc

Python经常说谎如何退出/停止进程。但是您可以尝试其他CTRL- <options>。例如:CTRL-C / Z / D
not2qubit 2014年

@ user1147688 ctrl + break可立即杀死Windows上的python解释器,而ctrl + c可以被捕获或忽略。
史密斯·约翰斯

Answers:


3

不幸的是,PowerShell控制台主机Ctrl+C用来终止正在进行的操作并Ctrl+Break终止该操作并关闭主机会话。恕我直言,这是最不幸的选择,但它在那里,我们可以忍受。

当遇到类似这样的情况时,我发现最简单的操作是从PowerShell会话中执行cmd,只需从PowerShell提示符下执行即可。现在,我实际上是暂时绕过PowerShell,完成后可以轻松返回到PowerShell会话。

您可能应该考虑的另一件事是使用cmd.exe而不是PowerShell,除非您尝试利用PowerShell的某些功能。


1

您可以通过以下方式尝试:

  1. 您的Powershell在工作中启动python程序

  2. 通过powershell主进程陷阱Ctrl-C

  3. 当捕获Ctrl-C时,停止在步骤1中启动的作业

然后,您可以继续执行Powershell脚本

  1. 要启动后台作业,请使用开始作业

    $ killMe =开始工作-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”时停止作业,

    停止工作-job $ killMe

但是,如果您需要与在后台运行的python服务器进行交互,生活将变得不那么轻松。您可能希望不断显示服务器的输出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.