所以我已经处理了一个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
的手册页有一个错误列表(非数字),如:
然后: 下面给出的错误值是由文件系统类型无关的错误引起的。每种文件系统类型都可能有自己的特殊错误和自己的特殊行为。 有关详细信息,请参阅Linux内核源代码。
任何指针?
答案 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()。
答案 2 :(得分:0)
与此处几乎所有其他答案所假定的不同,umount
的返回值不一定与mount
的返回值匹配!实际上,返回码是未能卸载的安装点数,至少对于util-linux的umount
,参见。 its source。
由于OP的问题是关于NAS的,所以我认为它可能是使用其他umount
实现的某些BSD变体。 AFAIK命令mount
和umount
也是特定于OS的,并且未由POSIX标准化(与各自的C函数不同),因此,与实现无关的解决方案几乎没有希望。
答案 3 :(得分:-2)
任何成功命令的返回代码为0
,如果失败则返回其他代码,取决于
您可以在运行命令后检查终端中的返回码:
echo $?