可怜的os.system
Python成名会引发异常吗?如果是的话,哪些?
答案 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
模块的原因。