Giữ PowerShell mở sau CTRL-BREAK


10

Tôi đang làm việc với Python Django trong Windows Vista Powershell. Sau khi tôi chạy python manage.py runserver, nó yêu cầu tôi CTRL-BREAKdừng quá trình. Nhưng sau khi tôi gõ nó, Powershell dừng quá trình và đóng lại. Có cách nào để ngăn chặn quá trình và giữ cho Powershell mở?


Mặc định django-windows này rất tệ vì nhiều lý do (như thực tế là nhiều máy tính xách tay và thậm chí cả bàn phím ảo tích hợp không có phím tắt). Tôi ước tôi có thể tìm thấy một công việc xung quanh.
Thế chấp

Python thường nói dối về những việc cần làm để thoát / dừng một quá trình. Nhưng bạn có thể thử CTRL- <tùy chọn> khác. Ví dụ: CTRL-C / Z / D
not2qubit

@ user1147688 ctrl + phá vỡ ngay lập tức giết chết trình thông dịch python trên windows trong khi ctrl + c có thể bị bắt hoặc bỏ qua.
Smit Johnth

Câu trả lời:


3

Thật không may, máy chủ bảng điều khiển PowerShell sử dụng Ctrl+Cđể chấm dứt hoạt động đang diễn ra và Ctrl+Breakchấm dứt hoạt động VÀ đóng phiên máy chủ. Đó là một lựa chọn đáng tiếc nhất IMHO nhưng nó ở đó và chúng ta phải sống với nó.

Tôi thấy điều dễ nhất để làm khi tôi gặp phải tình huống như thế này là từ phiên PowerShell chỉ cần thực hiện cmdtừ dấu nhắc PowerShell. Bây giờ tôi thực sự bỏ qua PowerShell tạm thời và tôi dễ dàng quay lại phiên PowerShell của mình khi hoàn tất.

Một điều khác có lẽ bạn nên xem xét là sử dụng cmd.exe thay vì PowerShell trừ khi có một số tính năng của PowerShell mà bạn đang cố gắng tận dụng.


1

Bạn có thể thử nó theo cách này:

  1. Powerhell của bạn khởi chạy chương trình python của bạn trong một công việc

  2. Bẫy Ctrl-C theo quy trình chính của powershell

  3. Khi Ctrl-C bị kẹt, dừng công việc được khởi chạy ở bước 1

Sau đó, bạn có thể tiếp tục tập lệnh powershell của mình

  1. Để khởi chạy một công việc nền, hãy sử dụng công việc bắt đầu

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

  2. Để bẫy Ctrl-C, hãy nói với bảng điều khiển của bạn coi Ctrl-C là đầu vào, kiểm tra điều này từ MSTN .

    [bảng điều khiển] :: TreatControlCAsInput = $ true

Sau đó chạy một vòng lặp UI để kiểm tra các phím nhập:

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. Để dừng công việc khi nhấn "Ctrl-C",

    dừng công việc -job $ killMe

Tuy nhiên, cuộc sống sẽ không dễ dàng nếu bạn cần tương tác với máy chủ python đang chạy ở chế độ nền. Và bạn có thể muốn hiển thị đầu ra của máy chủ của bạn liên tục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.