linux`usount`的返回码值是多少?

时间:2015-10-16 09:57:26

标签: python linux

所以我已经处理了一个python项目,其中有许多Linux系统调用mount / unmout / format / etc备份驱动器用于自定义NAS。

现在我想处理umount命令的输出并处理已卸载路径的情况:

print subprocess.check_output(['umount', '/storage/backup'])

可能会返回:

umount: /storage/backup: not mounted
Command '['umount', '/storage/backup']' returned non-zero exit status 32

现在,我可以解析输出字符串并搜索not mounted,但我更喜欢处理退出状态值(在本例中为32)。我试图找到umount命令的退出代码列表,但到目前为止还不走运。
此外,我已经尝试找到umount的源代码,但无法找到它(google一直指向umount命令的手册页或mount.c的源代码)

修改

umount的手册页有一个错误列表(非数字),如:

  • EBUSY - 目标无法卸载,因为它正忙。
  • EFAULT - 定位用户地址空间之外的点。

然后: 下面给出的错误值是由文件系统类型无关的错误引起的。每种文件系统类型都可能有自己的特殊错误和自己的特殊行为。 有关详细信息,请参阅Linux内核源代码

任何指针?

4 个答案:

答案 0 :(得分:9)

来自man mount

RETURN CODES
   mount has the following return codes (the bits can be ORed):

   0      success

   1      incorrect invocation or permissions

   2      system error (out of memory, cannot fork, no more loop devices)

   4      internal mount bug

   8      user interrupt

   16     problems writing or locking /etc/mtab

   32     mount failure

   64     some mount succeeded

   The command mount -a returns 0 (all succeeded), 32 (all failed), or  64
   (some failed, some succeeded).

答案 1 :(得分:3)

虽然这不能直接回答你的问题,但更强大(?)和有效的方法是在libc中调用mount()/ umount()系统调用包装而不是执行外部进程并尝试弄清楚它的输出。不幸的是,python标准库中没有内置的包装器,但是使用ctypes很容易,请参阅https://stackoverflow.com/a/29156997/75652了解如何通过ctypes调用mount()。

http://man7.org/linux/man-pages/man2/mount.2.html

http://man7.org/linux/man-pages/man2/umount.2.html

答案 2 :(得分:0)

与此处几乎所有其他答案所假定的不同,umount的返回值不一定与mount的返回值匹配!实际上,返回码是未能卸载的安装点数,至少对于util-linux的umount,参见。 its source

由于OP的问题是关于NAS的,所以我认为它可能是使用其他umount实现的某些BSD变体。 AFAIK命令mountumount也是特定于OS的,并且未由POSIX标准化(与各自的C函数不同),因此,与实现无关的解决方案几乎没有希望。

答案 3 :(得分:-2)

任何成功命令的返回代码为0,如果失败则返回其他代码,取决于

您可以在运行命令后检查终端中的返回码:

echo $?