【发布时间】:2011-07-12 05:27:20
【问题描述】:
Python 成名的受人尊敬的os.system 会抛出异常吗?如果有,有哪些?
【问题讨论】:
-
os.system()已经几乎没有受到尊重了......
标签: python exception command-line exception-handling operating-system
Python 成名的受人尊敬的os.system 会抛出异常吗?如果有,有哪些?
【问题讨论】:
os.system() 已经几乎没有受到尊重了......
标签: python exception command-line exception-handling operating-system
简短回答:是的:
>>> import os
>>> os.system(None)
TypeError ...
长答案:查看此处http://docs.python.org/library/subprocess.html#subprocess-replacements,了解如何避免使用os.system。
【讨论】:
在 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);
}
【讨论】:
os.system 文档没有提及应该/可以引发的异常。
os.system 抛出 TypeError 如果不存在恰好一个字符串参数。如果fork 由于资源或ulimit 限制而失败,它将返回-1。如果参数在某些方面无效(如不存在的命令),它将返回一个高错误代码。除了前面提到的TypeError,os.system 不会抛出任何异常。
【讨论】:
如果你问的是你调用的进程以错误结束时是否抛出异常,答案是否定的,你可以用os.system()调用一个程序,让它出错,你永远不会知道.
这就是您应该使用subprocess 模块的原因。
【讨论】: