安装fuse会在python中给出无效的参数错误

时间:2011-06-24 14:52:34

标签: python fuse

我已经将python代码编写到点安装上的安装保险丝上。它总是给出无效的参数错误。我在C中尝试了相同的程序,它工作正常。任何python Guru都可以帮助我找出问题所在,我已经在这里粘贴了代码。

#!/usr/bin/python

import stat
import os
import ctypes
from ctypes.util import find_library

libc = ctypes.CDLL (find_library ("c"))

def fuse_mount_sys (mountpoint, fsname):
        fd = file.fileno (file ("/dev/fuse", 'w+'))
        if fd < 0:
                raise OSError("Could not open /dev/fuse")

        mnt_param = "%s,fd=%i,rootmode=%o,user_id=%i,group_id=%i" \
                        % ("allow_other,default_permissions,max_read=131072", \
                        fd, stat.S_IFDIR, os.getuid(), os.getgid())

        ret = libc.mount ("fuse", "/mount", "fuse", 0, mnt_param)
        if ret < 0:
                raise OSError("mount failed with code " + str(ret))
        return fd

fds = fuse_mount_sys ("/mount", "fuse")

mount语法是:

int mount(const char *source, const char *target,
                 const char *filesystemtype, unsigned long mountflags,
                 const void *data);

我尝试使用swig并在C中编写程序,然后从中创建一个.so并且它们有效。但我有兴趣用纯python写作。提前谢谢。

strace的输出:

$ strace -s 100 -v -e mount python fuse-mount.py 
mount("fuse", "/mount", "fuse", 0, "allow_other,default_permissions,max_read=131072,fd=3,rootmode=40000,user_id=0,group_id=0") = -1 EINVAL (Invalid argument)


$ strace -s 100 -v -e mount ./a.out 
mount("fuse", "/mount", "fuse", 0, "allow_other,default_permissions,max_read=131072,fd=3,rootmode=40000,user_id=0,group_id=0") = 0

1 个答案:

答案 0 :(得分:2)

无法使用字符串初始化

ctypes.c_void_p。相反,只需使用不带c_void_p的字符串。

然后您可以比较

的输出
strace -v -e mount python mymount.py

strace -v -e mount ./mymount-c
直到匹配为止。

此外,请确保在调用mount时文件句柄fd仍处于打开状态。 file("/dev/fuse", 'w+')将被一些Python实现自动垃圾收集和关闭,包括cpython。您可以通过将file("/dev/fuse")的结果分配给变量来阻止这种情况。