Вызывает ли когда-либо python `os.system` исключение? - PullRequest
8 голосов
/ 09 марта 2011

Может ли уважаемая os.system известность Python выдать исключение? Если да, то какие?

Ответы [ 4 ]

9 голосов
/ 09 марта 2011

Краткий ответ: да:

>>> import os
>>> os.system(None)
TypeError ...

Длинный ответ: посмотрите здесь http://docs.python.org/library/subprocess.html#subprocess-replacements, чтобы узнать, как избежать использования os.system.

5 голосов
/ 09 марта 2011

В системах POSIX это выглядит как прямой переход к system() (перечисление из posixmodule.c Python 2.7.1):

static PyObject *
posix_system(PyObject *self, PyObject *args)
{
    char *command;
    long sts;
    if (!PyArg_ParseTuple(args, "s:system", &command))
        return NULL;
    Py_BEGIN_ALLOW_THREADS
    sts = system(command);
    Py_END_ALLOW_THREADS
    return PyInt_FromLong(sts);
}
3 голосов
/ 09 марта 2011

os.system выдает TypeError, если нет строго одного строкового аргумента. Если fork завершится неудачей из-за ограничений по ресурсам или ограничениям, он вернет -1. Если аргумент каким-либо образом недопустим (например, несуществующая команда), он вернет высокий код ошибки. Кроме вышеупомянутого TypeError, os.system не исключает никаких исключений.

2 голосов
/ 10 марта 2011

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

Вот почему вы должны использовать модуль subprocess.

...