Остановите один скрипт Python, который выполняется внутри другого - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть приложение Python, которое запускается из основного скрипта, скажем, main.py.main.py (поскольку мое приложение организовано) ссылается и импортирует другие файлы .py в том же каталоге, в которых находятся другие функции.Поскольку мое приложение постоянно работает, оно импортирует такую ​​функцию из другого скрипта, который также должен работать вечно, пока он не будет явно отменен.

Дело в том, как бы я отменил этот конкретный скрипт, оставив его затронутые переменные нетронутыми, а основной скрипт / приложение большего размера все еще работало?

Я не знаю, как бы я нацелился на конкретную функцию, чтобы остановить ее выполнение.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

не уверен в точном синтаксисе, так как я сейчас не в состоянии проверить, но что-то вроде этого - то, о чем я думал:

HaltException.py:

class HaltException(Exception):
    pass

-

main.py:

from HaltException import HaltException

class Functions():

    def a(self):
       print("hey")
       self.b()
       return "1"
def b(self):
    print("hello")
    raise HaltException()

def main():

    func_obj = Functions()

    try: 
        func_obj.a()
    except HaltException as e:
        pass
    print("Awesome")

main()
0 голосов
/ 14 февраля 2019

Я использую функцию kill в моих утилитах, чтобы уничтожить любой ненужный процесс python, имя которого я знаю.Обратите внимание, что следующий код был протестирован / работает на компьютерах с Ubuntu Linux и Mac OS.

def get_running_pids(process_name):
    pids = []
    p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
    out, err = p.communicate()
    for line in out.splitlines():
        if process_name in line.decode('utf-8'):
            pid = int(line.decode('utf-8').split(None, 1)[0])
            pids.append(pid)
    return pids

def kill_process_with_name(process_name):
        pids = get_running_pids(process_name)
        for pid in pids:
            os.kill(pid, signal.SIGKILL)
...