Как определить предел памяти os.system - PullRequest
3 голосов
/ 02 ноября 2011

В настоящее время я настраиваю и запускаю ряд команд с помощью команд os.fork и os.system.Я устанавливаю время и ограничения памяти через resource.setrlimit, и это, кажется, работает нормально.Тем не менее, каждая программа имеет свой собственный способ сбоя из-за ограничения памяти - программа на python выдает MemoryError, программа на c ++ может иметь неправильное размещение и т. Д.

Я хотел бы знать, как яможет определить, когда команда os.system завершила выполнение из-за ограничения лимита памяти (как предполагалось по тайм-ауту или некоторому другому способу завершения).Я безуспешно пробовал следующее:

try:
    status = os.system(command)
except MemoryError:
    # Never actually makes it here...

Редактировать : Я действительно сейчас занимаюсь только системами Unix.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

такой системный вызов вряд ли обернет возвращаемое значение и вызовет исключение.

вам придется сделать это самостоятельно с помощью модуля подпроцесса: http://docs.python.org/library/subprocess.html#module-subprocess

однако, в зависимости от того, какой системный вызов вы делаете, вы можете не знать, произошел ли сбой из-за ошибки памяти, если он явно не сообщит вам об этом.

0 голосов
/ 02 ноября 2011

См. http://blog.tsul.net/2008/04/ossystem-and-its-return-value.html

В Windows кажется, что system () и wait () всегда возвращают 0.

В unix или mac system () возвращает "кортеж, содержащийего индикация состояния pid и выхода: 16-битное число, младший байт которого является номером сигнала, который убил процесс, и старший байт которого является состоянием выхода (если номер сигнала равен нулю), старший бит младшего байта равенустановить, если файл ядра был создан. Доступность: Macintosh, Unix. "

Вы должны иметь возможность посмотреть младший байт, чтобы увидеть, что это за сигнал, и использовать его, чтобы определить причину, по которой он был убит / вышел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...