Как убить процесс запущенный через subprocess?

Пишу программу которая запускает и останавливает скрипт Python через другой скрипт Python по просьбе пользователя. И написал следующий код:

import subprocess
from subprocess import Popen
from subprocess import check_output
import psutil

def Start():
    Text = input("Введите 'Старт' или 'Стоп': ")

    if Text == "Старт":
        proc = subprocess.Popen([sys.executable, 'Script.py'])
        
    elif Text == "Стоп":
        proc.kill()

while True:
    Start()

Но мне выводит ошибку когда пытаюсь остановить процесс.

Traceback (most recent call last):
  File "C:\Users\User\main.py", line 39, in Start
    killprocess("BOT_VK_ExCase3D.py")

  File "C:\Users\User\main.py", line 23, in killprocess
    pid = get_pid(name)

  File "C:\Users\User\main.py", line 20, in get_pid
    return map(int, check_output(["pidof", name]).split())

  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 411, in check_output
    **kwargs).stdout

  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 488, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 800, in __init__
    restore_signals, start_new_session)

  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\subprocess.py", line 1207, in _execute_child
    startupinfo)

FileNotFoundError: [WinError 2] ═"непонятные символы"

Вопрос: Что я делаю не так и как это исправить?


Ответы (2 шт):

Автор решения: eri
proc = None

def Start():
    global proc
    Text = input("Введите 'Старт' или 'Стоп': ")

    if Text == "Старт":
        proc = subprocess.Popen([sys.executable, 'Script.py'])
        
    elif Text == "Стоп" and proc:
        proc.kill()
→ Ссылка
Автор решения: Никитоз Саныч

Небольшое уточнение (это не столько для вас, столько для тех, кто будет искать решение похожей проблемы в других условиях) - смотря откуда была запущена программа с помощью subprocess. Просто сам столкнулся с таким случаем, что у меня программу запускает функция через нажатие на кнопку на сайте. Соответственно, она, раз отработав, выключается. А программа продолжает жить и работать своим чередом. Тогда наиболее простой вариант - это привязать работу программы к какому-либо cfg-файлу, на который можно влиять извне. Программа будет проверять время от времени значение переменной "OnProcess", и если оно равно "0", то будет завершаться (лучше всего через sys.exit()). И вот путем влияния на этот файл можно управлять работой программы.

→ Ссылка