Завершение работы программы python из другой программы - PullRequest
0 голосов
/ 09 марта 2020

Как использовать subprocess для завершения программы, которая запускается при загрузке? Я наткнулся на этот вопрос и нашел wordsforthewise's ответ и попробовал его, но ничего не произошло.

Wordsforthewise 'Ответ:

import subprocess as sp

extProc = sp.Popen(['python','myPyScript.py']) # runs myPyScript.py 

status = sp.Popen.poll(extProc) # status should be 'None'

sp.Popen.terminate(extProc) # closes the process

status = sp.Popen.poll(extProc) # status should now be something other than 'None' ('1' in my testing)

У меня есть программа /home/pi/Desktop/startUpPrograms/facedetection.py, запускаемая Cronjob при загрузке, и я хочу убить ее из flask маршрута приложения следующим образом.

Назначение имени программы для extProc = program_name будет работать? Если да, то как его назначить?

@app.route("/killFD", methods=['GET', 'POST'])
def killFaceDetector():
    #kill code goes here.

1 Ответ

2 голосов
/ 09 марта 2020

Поскольку вы говорите, что программа запускается cronjob, у вас не будет дескриптора PID программы в Python.

Вам придется перебирать все процессы, чтобы найти один (и) kill ... или, более кратко, просто используйте утилиту pkill с флагом -f, чтобы она выглядела в полной командной строке. Следующее действие уничтожит все процессы (если у вашего пользователя есть на это разрешение), которые имеют facedetection.py в командной строке.

import os

os.system('pkill -f facedetection.py')
...