Python的`os.system`会抛出异常吗?

13 投票
4 回答
13236 浏览
提问于 2025-04-16 13:23

大家都知道Python里面有个很有名的功能叫做os.system,那么这个功能会不会出错呢?如果会的话,可能会出现哪些错误呢?

4 个回答

4

os.system 这个函数如果没有传入一个字符串参数,就会报一个叫 TypeError 的错误。如果因为资源不足或者系统限制(叫 ulimit)导致无法创建新进程,它会返回 -1。如果传入的参数有问题,比如命令不存在,它会返回一个比较大的错误代码。除了前面提到的 TypeErroros.system 不会抛出其他的异常。

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

简短的回答:是的。

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

详细的回答:可以去这里看看 http://docs.python.org/library/subprocess.html#subprocess-replacements,了解如何避免使用 os.system

撰写回答