Запустите скрипт Matlab с подпроцессом python и командой тайм-аута - PullRequest
2 голосов
/ 01 мая 2020

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

Это минимальный код

import subproces as sub
cod = 'timeout -k 300 400 matlab -nodisplay -nosplash -r test'.split()
proc = sub.run(cod, stdout=sub.PIPE, stderr=sub.PIPE)

Эти строки кода просто выполняются до достижения условия тайм-аута без значений в stdout и stderr ,

Если я копирую эти строки внутри терминала, он работает отлично. (сам скрипт заканчивается «exit», поэтому после завершения он возвращается к терминалу)

Я уже проделал аналогичный процесс с Octave, и он работает без нареканий.

Я пытался использовать модуль python от matlab, но тот, который у меня есть, не совместим с моей текущей версией Python, альтернативой может быть понижение Python, но я не хочу сделайте это.

Требуется условие тайм-аута, потому что некоторые из этих сценариев могут бесконечно l oop. Я проверяю коды студентов.

Редактировать: после обсуждения здесь основным виновником является команда тайм-аута, если ее убрать, скрипт работает.

1 Ответ

1 голос
/ 01 мая 2020

Вы можете использовать timeout аргумент subprocess.run:

import subproces as sub
cod = 'matlab -nodisplay -nosplash -r test'.split()
proc = sub.run(cod, stdout=sub.PIPE, stderr=sub.PIPE, timeout=300)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...