, поскольку вы не проверяете код возврата wait()
, программа продолжает цикл, даже если подпроцесс прерывается.
Вы должны проверить его (и использовать список аргументов /удалить shell=True
)
for fold in range(10):
comand = ["python","train_kfolds_pos.py",current_model,str(fold)]
print(comand)
process = subprocess.Popen(comand, stdout=subprocess.PIPE)
rc = process.wait()
# quit loop if return code is not 0
if rc:
print("aborted, returncode {}".format(rc))
break
text = process.communicate()[0].decode("utf-8")
print(text)
побочным эффектом этого является то, что, если программа завершается ненормально по какой-либо другой причине, она также останавливается.
В сторону: вы можете подумать о том, чтобы не вызыватьподпроцесс python, но напрямую вызывать функцию внутри скрипта и параметров python train_kfolds_pos.py
Исключения будут распространяться естественным образом (как и исключения прерываний клавиатуры).Что-то вроде:
import train_kfolds_pos
for fold in range(10):
train_kfolds_pos.compute(current_model,fold)