Метод check_output Python иногда не возвращает выходные данные

#python #scripting #multiprocessing

#python #сценарии #многопроцессорная обработка

Вопрос:

У меня есть скрипт на Python, который должен запускать большое количество других скриптов, каждый из которых расположен в подкаталоге рабочего каталога скрипта. Предполагается, что каждый из этих других сценариев подключается к игровому клиенту и запускает ИИ для этой игры. Чтобы выполнить этот запуск, мне пришлось запускать каждый скрипт в двух отдельных потоках (по одному для каждого игрока). Проблема, с которой я сталкиваюсь, заключается в том, что иногда выходные данные скриптов не фиксируются. Мой код выполнения выглядит следующим образом:

 def run(command, name, count):
    chdir(name)
    output = check_output(" ".join(command), stderr = STDOUT, shell = True).split('r')
    chdir('..')
    with open("results_"   str(count)   ".txt", "w") as f:
        for line in output:
            f.write(line)
 

Странная часть заключается в том, что ему удается захватывать более длинные потоки, но короткие остаются незамеченными. Как я могу изменить свой код, чтобы исправить эту проблему?

ОБНОВЛЕНИЕ: я не думаю, что это проблема с буферизацией, потому check_output("ls ..", shell = True).split('n')[:-1] что возвращает ожидаемый результат, и эта команда должна занимать гораздо меньше времени, чем сценарии, которые я пытаюсь запустить.

ОБНОВЛЕНИЕ 2: я обнаружил, что выходные данные сокращаются для более длительных запусков. Оказывается, что конец вывода по какой-то причине пропускается для всех процессов, которые я запускаю. Это также объясняет, почему более короткие прогоны вообще не дают никаких выходных данных.