2015-01-31 4 views
0
def example_function(self): 
     number = self.lineEdit_4.text() #Takes input from GUI 
     start = "python3 /path/to/launched/script.py "+variable1+" "+variable2+" "+variable3 #Bash command to execute python script with args. 
     for i in range(0,number): 
      x = subprocess.Popen(start,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)#Launch another script as a subprocess 

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

x.terminate() 

Но это просто не работает, я думаю, что должно убить все подпроцессы, но он не делает этого, я думаю, что это может быть убийство последнего запущенным процесса или что-то эти строки, но мой вопрос: как я могу убить любое количество процессов, запущенных моей первой функцией?

+0

Вы перезапись 'x' переменных каждый раз через петлю, так что он просто содержит последний подпроцесс вы начали. Поместите их в список, а затем убейте всех из них в цикле. – Barmar

+0

Я не думаю, что каждый отдельный процесс может присваивать собственную уникальную переменную для возможного уникального количества процессов каждый раз. Можете ли вы привести пример того, как я могу это сделать? – user3907837

+1

Я не сказал уникальных переменных, я сказал, чтобы составить список. – Barmar

ответ

0

Поместите все подпроцессы в списке вместо перезаписи x переменной

def example_function(self): 
    number = self.lineEdit_4.text() #Takes input from GUI 
    start = "python3 /path/to/launched/script.py "+variable1+" "+variable2+" "+variable3 #Bash command to execute python script with args. 
    procs = [] 
    for i in range(0,number): 
     x = subprocess.Popen(start,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)#Launch another script as a subprocess 
     procs.append(x) 
    # Do stuff 
    ... 
    # Now kill all the subprocesses 
    for p in procs: 
     p.kill() 
+0

Эта функция, чтобы убить все подпроцессы, не работает, к сожалению. и он не выводит никаких ошибок, но я все еще вижу, что процессы работают. – user3907837

+0

Я получил ваш пример для работы с некоторыми тяжелыми изменениями в закрывающих разделах, спасибо за то, что указал мне в правильном направлении! – user3907837

+0

@ user3907837: 'p.kill()' убивает оболочку. Он не убивает скрипт python и его потомков (если есть). – jfs

Смежные вопросы