Завершить сценарий Python из другого сценария Python - PullRequest
6 голосов
/ 16 июня 2010

У меня есть долго работающий скрипт Python, который я хочу завершить из другого скрипта Python. В идеале я ищу способ установки идентификатора процесса для первого сценария и возможность увидеть, работает ли он по этому идентификатору со второго. Кроме того, я хотел бы иметь возможность завершить этот длительный процесс.

Есть ли какие-нибудь классные ярлыки, чтобы это произошло?

Кроме того, я работаю в среде Windows.

Я только недавно нашел альтернативный ответ здесь: Проверьте, запущен ли скрипт Python

Ответы [ 2 ]

4 голосов
/ 16 июня 2010

Вы можете получить свой собственный PID (идентификатор процесса) через

import os
os.getpid()

и убить процесс в Unix

import os, signal
os.kill(5383, signal.SIGKILL)

, чтобы убить в Windows, используя

import subprocess as s
def killProcess(pid):
    s.Popen('taskkill /F /PID {0}'.format(pid), shell=True)

Вы можете отправить PID другой программе или выполнить поиск в списке процессов, чтобы найти имя другого сценария и уничтожить его с помощью приведенного выше сценария.

Надеюсь, это поможет вам.

3 голосов
/ 24 июня 2015

Вы ищете модуль подпроцесса .

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)

subprocess.Popen запускает внешний скрипт Python, что эквивалентно вводу 'python myPyScript.py' в консоли или терминале.

Состояние из subprocess.Popen.poll (extProc) будет иметь значение «Нет», если процесс все еще выполняется, и (для меня) 1, если он был закрыт из этого скрипта. Не уверен насчет статуса, если он был закрыт другим способом.

...