ポイントマウント上のマウントヒューズにPythonコードを書きました。常に無効な引数エラーを返します。私はCで同じプログラムを試しましたが、うまくいきます。 Python Guruが問題の原因を見つけるのを助けてくれますか?ここにコードを貼り付けました。マウントヒューズはPythonで無効な引数エラーを返します
#!/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")
構文をマウントです:
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
stackoverflowの質問で提示されたプログラムを簡略化することができれば、例えば15行未満であれば大きな助けになるでしょう。複雑なエラー処理は必要ありません。 'fd <0:raise ValueError( 'fileno failed')'で十分です。また、 'print''呼び出しは、実際の問題をあまり助けず、難読化しません。 – phihag
そのことに言及してくれてありがとう、次回は気をつけます。 – hue