programing

Powershell에서 Python을 종료하기 위한 Ctrl-C가 작동하지 않습니다.

css3 2023. 8. 28. 21:16

Powershell에서 Python을 종료하기 위한 Ctrl-C가 작동하지 않습니다.

Python은 Powershell/Command Prompt에서 Ctrl-C를 사용할 때 종료되지 않고 대신 "키보드"를 제공합니다.인터럽트" 문자열입니다.

최근에 Windows 10을 다시 설치했습니다.다시 설치하기 전에 Ctrl-C가 python(3.5/2.7)을 종료하고 출력이 없습니다.

왜 이런 일이 벌어졌는지 아는 사람?단순한 설정인가요?

제가 생각할 수 있는 유일한 차이점은 제가 지금 파이썬 3.6에 있다는 것입니다.Ctrl-D는 Windows의 Ubuntu에서 Bash에서 작동하고 Ctrl-C는 활성화된 아나콘다 python2 환경에서 작동하여 python을 종료합니다.

윈도우 10 프로 빌드 18363 파이썬 3.8.1 버전.몇 가지 파이썬 스크립트를 실행하고 있었는데 몇 가지를 중단할 수 없었습니다.CTRL + C,그렇지만CTRL + BREAK매번 일했습니다.Windows Docs에는 다음과 같은 내용이 있습니다.

Ctrl+C 및 Ctrl+BREAK 키 조합은 콘솔 프로세스에 의해 특수 처리됩니다.기본적으로 콘솔 창에 키보드 포커스가 있는 경우 Ctrl+C 또는 Ctrl+Break은 키보드 입력이 아닌 신호(SIGINT 또는 SIGBREAK)로 처리됩니다.

CTRL+BREAK는 항상 신호로 처리되지만 응용 프로그램은 다음 두 가지 방법으로 기본 CTRL+C 동작을 변경하여 핸들러 함수가 호출되지 않도록 할 수 있습니다.

  1. 콘솔 모드 설정 기능은 ENABLE_PROCESSED_를 비활성화할 수 있습니다.콘솔의 입력 버퍼에 대한 입력 입력 모드이므로 Ctrl+C는 신호가 아닌 키보드 입력으로 보고됩니다.
  2. SetConsoleCtrlHandler가 매개 변수에 NULL 및 TRUE 값을 사용하여 호출되면 호출 프로세스는 Ctrl+C 신호를 무시합니다.NULL 및 FALSE 값을 사용하여 SetConsoleCtrlHandler를 호출하면 정상적인 CTRL+C 처리가 복원됩니다.CTRL+C 신호를 무시하거나 무시하지 않는 이 특성은 하위 프로세스에서 상속되지만 기존 프로세스에 영향을 주지 않고 모든 프로세스에서 사용하거나 사용하지 않도록 설정할 수 있습니다.

따라서,CTRL + CSIGINT로 보이며 실행 중인 프로그램에 의해 동작이 수정될 수 있습니다.윈도우의 파이썬은 다음과 같은 방식으로 코드화된 것으로 보입니다.CTRL + C우리가 기대하는 SIGINT가 아닌 키보드 입력으로 처리되고 있습니다.다행스럽게도 나는 그것을 가지고 있습니다.CTRL + BREAK키보드의 키를 누르면 항상 작동합니다.

없는 분들을 위해서.BREAK키보드에서 Windows On Screen 가상 키보드를 사용할 수 있습니다.

  1. 를 누릅니다.win key + r응용 프로그램 실행 프로그램을 엽니다.
  2. osk확인을 누릅니다.
  3. 에서 가상키에를다누니릅서드를 누릅니다.ctrl + ScrLk그리고 이것은 프로그램을 죽일 것입니다.

스택 스레드에는 다음과 같은 경우 시도할 수 있는 몇 가지 다른 방법이 있습니다.ctrl + ScrLk가상 키보드에서 작동하지 않습니다.

입력할 수 있습니다.

CTRL + Z, 

그런 다음 ENTER를 눌러 powershell에서 python을 종료합니다.

파워셸 스크린샷

최근 Windows 10 Insider 빌드 15002에 나타난 버그입니다.

해결 방법은 매핑된 키를 Ctrl C에서 Ctrl K와 같은 키로 변경하는 것입니다.

이 방법에 , 이 방법을 볼 수 .stty -a

Terminate를 Ctrl + K에 매핑할 각 bash 세션에서 이 명령을 실행할 수 있습니다.

stty intr \^k

TEMP 솔루션으로 이를 Bashrc에 포함하여 각 새 세션에서 실행할 수 있습니다.

이 버그는 Github #1569에서 이미 보고되었습니다.

제 경우, 오른쪽 ctrl + c가 aconda3 파워셸에서 트릭을 수행하므로 재매핑이 필요하지 않습니다. Windows 10에 있습니다.

그것은 마법처럼 작동했습니다.

Fn 키가 있는 랩톱이 있으면 다음을 누릅니다.

Ctrl + Fn + S

출처: https://www.dell.com/community/Laptops-General-Read-Only/break-key-alternative/td-p/3826467

C를 , 롤를누 C면르트컨,KeyboardInterrupt예외가 발생했습니다.코드를 중지하지 않는 경우 가장 좋은 방법은 다음을 추가하는 것입니다.try당신의 코드에 대한 진술이 포착됩니다.KeyboardInterrupt

try:
    ....

except KeyboardInterrupt:
    exit()

코드가 갑자기 생각이 안 나서 뭔가 잘못됐다면 미안해요.

편집::Ctrl Break에서는 는또일키에서드보부▁or.Ctrl Pause파이썬 코드를 즉시 중지합니다.

키보드의 상단 모서리에 있는 Esc 버튼을 누르는 것은 Windows-7에서 작동하는 것처럼 보입니다. Python 3.+ 무한을 깨뜨렸습니다...대화형 스크립트의 잘못된 구문에 대해

제가 Ctrl-C를 눌렀을 때, python은 출력 없이 정상적으로 종료되었습니다.

언제 수 이 안 나요.Ctrl + C내 기억 속에서,Ctrl + C항상 나에게 주는KeyboardInterrupt.


나는 또한 그 이유를 설명하는 답을 찾을 수 없었습니다.Ctrl + C파이썬을 쉘에서 그만둘 수 없습니다.참고로,Ctrl + D그리고.Ctrl + \여러 가지 이유로 python을 종료할 수 있습니다.여기서 @Gilles의 답변을 참조하십시오.https://superuser.com/questions/169051/whats-the-difference-between-c-and-d-for-unix-mac-os-x-terminal


하지만 어떻게 대처해야 할지 생각합니다.Ctrl + C단지 프로그램의 결정일 뿐입니다.네, 프로그램에서 어떻게 처리할지에 따라 완전히 달라지는 것 같습니다.제가 아래에 쓰는 예를 참조하세요.

test.c

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

static void ctrlC_Handler(int sig){
    if(sig == SIGINT){
        printf("(:KeyboardInterrupt:)\n");
        printf(">>>");
        signal(SIGINT, ctrlC_Handler);
    }
}

static void welcome(){
    printf("Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)\n");
    printf("[GCC 7.3.0] on linux2\n");
    printf("Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n");
    printf(">>>");
    fflush(stdout);
}

int main(){
    welcome();
    signal(SIGINT, ctrlC_Handler);

    for(;;){
        pause();
    }

    return 0;
}

로 그것을 정리합니다.gcc test.c실행합니다../a.out눌러 보십시오.Ctrl + C적어도 당신이 입력할 때 파이썬 프로그램의 동작(출력)을 모방하는 것을 볼 수 있습니다.Ctrl + C.

그래서, 제 생각에는, 그것은 특별한 것이 아니라, 그것을 어떻게 다룰 것인가에 대한 인간/프로그래머/저자의 결정일 뿐입니다.

언급URL : https://stackoverflow.com/questions/42039231/ctrl-c-for-quitting-python-in-powershell-now-not-working