python的`os.system`是否会抛出异常?

时间:2011-03-09 20:30:54

标签: python exception command-line exception-handling operating-system

可怜的os.system Python成名会引发异常吗?如果是的话,哪些?

4 个答案:

答案 0 :(得分:9)

简答:是的:

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

答案很长:点击http://docs.python.org/library/subprocess.html#subprocess-replacements查看如何避免使用os.system

答案 1 :(得分:5)

在POSIX系统上,它似乎是system()的直接传递(从Python 2.7.1的posixmodule.c列出):

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);
}

答案 2 :(得分:3)

如果没有一个字符串参数,

os.system会抛出TypeError。如果fork因资源或ulimit限制而失败,则会返回-1。如果参数在某种程度上无效(如非现有命令),则会返回高错误代码。除了前面提到的TypeError之外,os.system不会抛出任何例外。

答案 3 :(得分:2)

如果你问的是当你正在调用的进程以错误结束时它是否会抛出异常,答案是否定的,你可以用os.system()调用一个程序,让它出错,你会永远不会知道。

这就是你应该使用subprocess模块的原因。