2016-11-22 4 views
2

내 응용 프로그램에서 일부 파이썬 스크립트를 실행하고 싶지만 가끔 스크립트가 끝나기 전에 다른 파이썬 스크립트를 실행하고 싶습니다.C API로 파이썬 스크립트를 종료하는 방법

현재 스크립트를 실행하려면 PyRun_SimpleString(python_script)을 사용하고 있지만 어떻게 종료해야할지 모르겠다. 누군가 나를 도울 수 있습니까?

+0

때 스크립트를 stopthe 하시겠습니까? 어떻게 멈추기로 결정하셨습니까? PyRun_SimpleString을 호출하기 전에 스크립트가 아직 시작되지 않았으며 PyRun_SimpleString을 호출 한 후 스크립트가 이미 완료되었습니다. –

+0

내 응용 프로그램에서 파이썬 스크립트 파일을 선택하고 내용을 읽은 다음 PyRun_SimpleString()을 호출하여 실행하십시오.하지만 언젠가는 사용자가 스크립트를 마치기 전에 STOP 버튼을 눌러 스크립트를 종료 할 수 있습니다. 그것을 종료하는 방법을 알지 못합니다. pytho 명령 줄을 사용하여 스크립트를 실행하는 경우 CTRL + C를 사용하여 중단 할 수 있지만 python.dll API를 사용하여이를 깨뜨리는 방법은 아직 찾을 수 없습니다. – Fent

+0

@ n.m. PyRun_SimpleString이 반환되기 전에 모든 스레드가 종료되는 것은 아닙니다. 때로는 파이썬 인터프리터가 모든 쓰레드를 종료 할 때까지 기다려야 만한다. 이전 XBMC 소스 코드에서 파이썬 인터페이스에서이 동작을 관찰했습니다. –

답변

2

C 프로그램에서 파이썬 스크립트를 죽이려면 파이썬 스크립트 (또는 다른 정규식)의 이름을 사용하여 해당 프로세스 ID를 찾은 다음 프로세스를 종료 할 수 있습니다.

My C는 약간 녹슬었지만 아래 코드는 test.py이라는 실행중인 python 스크립트를 삭제합니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 

int main (void) { 
    bool kill_python = true; 

    if (kill_python == true) { 
     FILE *cmd = popen("kill -9 $(ps aux | grep '[t]est.py' | awk '{print $2}')", "r"); 
     pclose(cmd); 
    } 

    return 0; 
} 

ps aux | grep '[t]est.py' | awk '{print $2}'

kill -9 {PID} 강제로 프로세스를 종료 파이썬 스크립트 (= 비 잡을 비 무시할 죽)의 프로세스 ID를 반환

+0

이 답변 자체로는 문제가 해결되지 않지만이 솔루션을 통해 아이디어를 얻었습니다. 질문 :이 질문은 'python 스크립트'가 아니라 'PID'가없는 'python 스크립트 문자열'을 중지하려고합니다. 그가 할 수있는 일은 프로세스를 포크하는 것이고, 일단 파이썬 스크립트를 죽이고 싶다면 포크 프로세스를 죽여야합니다. 그런 식으로, 나는 이것이 좋은 접근이고 그러므로 현상금을 수여하는 것이라고 생각한다. –

+0

이 답변은 이미 @georgexsh에서 제공합니다. 이전에 알려지지 않았 음을 유감스럽게 생각합니다. –