因此,我收到了一个python项目,其中有很多Linux系统调用来挂载/unmout/格式化/etc备份驱动器,以便进行定制的NAS。
现在,我想处理umount命令的输出,并处理umounted路径的情况:
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的手册页有一个错误列表(非数字),如:
然后:下面给出的错误值是由文件系统类型独立的错误造成的。每种文件系统类型都可能有自己的特殊错误和自己的特殊行为。有关详细信息,请参阅Linux内核源代码。
有什么指示吗?
发布于 2015-10-16 10:08:35
来自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).发布于 2015-10-16 11:04:35
虽然这不是你的问题的直接答案,但更有力的(?)有效的方法是在libc中调用/umount() syscall包装器,而不是执行外部进程,并试图计算出它的输出。不幸的是,python标准库中没有内置包装器,但是使用ctype很容易,有关如何通过ctype调用挂载(),请参见https://stackoverflow.com/a/29156997/75652。
http://man7.org/linux/man-pages/man2/mount.2.html
http://man7.org/linux/man-pages/man2/umount.2.html
发布于 2019-02-15 12:53:22
与其他所有答案不同的是,umount的返回值不一定与mount的返回值匹配!实际上,返回的代码是未能卸载的挂载点的数量,至少对于util的umount,cf是这样。其来源。
由于OP的问题是关于NAS的,所以我假设使用另一个umount实现的可能是某个BSD变体。AFAIK命令mount和umount也是操作系统特有的,不受POSIX的规范(与各自的C函数不同),因此对于任何与实现无关的解决方案都没有什么希望。
https://stackoverflow.com/questions/33167585
复制相似问题