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

Cla*_*diu 8 python command-line operating-system exception-handling exception

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

pho*_*oji 9

简短回答:是的:

>>> import os
>>> os.system(None)
TypeError ...
Run Code Online (Sandbox Code Playgroud)

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


sam*_*ias 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然很有启发性,但这是一个实现细节 - 除非文档准确指出它做了什么或不做什么例外,否则没有理由为什么其他实现不能选择在某些条件下引发异常. (2认同)
  • 这就是为什么人们应该熟悉一个人使用的运行时.我假设CPython,因为没有提到更具体的运行时环境(Jython,PyPi).2.7.1的[`os.system`](http://docs.python.org/library/os.html?highlight=os.system#os.system)文档没有提到应该/可能的例外情况提高. (2认同)